@@ -61,25 +61,12 @@ def binary
61
61
end
62
62
63
63
def run ( *command )
64
- WebDriver . logger . debug ( "Executing Process #{ command } " , id : :selenium_manager )
65
-
66
- begin
67
- stdout , stderr , status = Open3 . capture3 ( *command )
68
- rescue StandardError => e
69
- raise Error ::WebDriverError , "Unsuccessful command executed: #{ command } ; #{ e . message } "
70
- end
64
+ stdout , stderr , status = execute_command ( *command )
65
+ result = parse_result_and_log ( stdout )
71
66
72
- json_output = stdout . empty? ? { 'logs' => [ ] , 'result' => { } } : JSON . parse ( stdout )
73
- json_output [ 'logs' ] . each do |log |
74
- level = log [ 'level' ] . casecmp ( 'info' ) . zero? ? 'debug' : log [ 'level' ] . downcase
75
- WebDriver . logger . send ( level , log [ 'message' ] , id : :selenium_manager )
76
- end
67
+ validate_command_result ( command , status , result , stderr )
77
68
78
- result = json_output [ 'result' ]
79
- return result unless status . exitstatus . positive? || result . nil?
80
-
81
- raise Error ::WebDriverError ,
82
- "Unsuccessful command executed: #{ command } - Code #{ status . exitstatus } \n #{ result } \n #{ stderr } "
69
+ result
83
70
end
84
71
85
72
def platform_location
@@ -98,6 +85,38 @@ def platform_location
98
85
raise Error ::WebDriverError , "unsupported platform: #{ Platform . os } "
99
86
end
100
87
end
88
+
89
+ def execute_command ( *command )
90
+ WebDriver . logger . debug ( "Executing Process #{ command } " , id : :selenium_manager )
91
+
92
+ Open3 . capture3 ( *command )
93
+ rescue StandardError => e
94
+ raise Error ::WebDriverError , "Unsuccessful command executed: #{ command } ; #{ e . message } "
95
+ end
96
+
97
+ def parse_result_and_log ( stdout )
98
+ json_output = stdout . empty? ? { 'logs' => [ ] , 'result' => { } } : JSON . parse ( stdout )
99
+
100
+ json_output [ 'logs' ] . each do |log |
101
+ level = log [ 'level' ] . casecmp ( 'info' ) . zero? ? 'debug' : log [ 'level' ] . downcase
102
+ WebDriver . logger . send ( level , log [ 'message' ] , id : :selenium_manager )
103
+ end
104
+
105
+ json_output [ 'result' ]
106
+ end
107
+
108
+ def validate_command_result ( command , status , result , stderr )
109
+ if status . nil? || status . exitstatus . nil?
110
+ WebDriver . logger . info ( "No exit status for: #{ command } . Assuming success if result is present." ,
111
+ id : :selenium_manager )
112
+ end
113
+
114
+ return unless status &.exitstatus &.positive? || result . nil?
115
+
116
+ code = status &.exitstatus || 'exit status not available'
117
+ raise Error ::WebDriverError ,
118
+ "Unsuccessful command executed: #{ command } - Code #{ code } \n #{ result } \n #{ stderr } "
119
+ end
101
120
end
102
121
end # SeleniumManager
103
122
end # WebDriver
0 commit comments