فهرست منبع

Merge pull request #145 from gempesaw/fix-2.42.2-again

v0.2002 breaks methods that correctly return "" as a false value
Daniel Gempesaw 11 سال پیش
والد
کامیت
de233badf9

+ 210 - 136
lib/Selenium/Remote/Commands.pm

@@ -10,276 +10,344 @@ has '_cmds' => (
     builder => sub {
         return {
             'status' => {
-                'method' => 'GET',
-                'url'    => 'status'
+                'method'             => 'GET',
+                'url'                => 'status',
+                'no_content_success' => 0
             },
             'newSession' => {
-                'method' => 'POST',
-                'url'    => 'session'
+                'method'             => 'POST',
+                'url'                => 'session',
+                'no_content_success' => 0
             },
             'getSessions' => {
-                'method' => 'GET',
-                'url'    => 'sessions'
+                'method'             => 'GET',
+                'url'                => 'sessions',
+                'no_content_success' => 0
             },
             'getCapabilities' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId',
+                'no_content_success' => 0
             },
             'setTimeout' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/timeouts'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/timeouts',
+                'no_content_success' => 0
             },
             'setAsyncScriptTimeout' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/timeouts/async_script'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/timeouts/async_script',
+                'no_content_success' => 0
             },
             'setImplicitWaitTimeout' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/timeouts/implicit_wait'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/timeouts/implicit_wait',
+                'no_content_success' => 0
             },
             'quit' => {
-                'method' => 'DELETE',
-                'url'    => 'session/:sessionId'
+                'method'             => 'DELETE',
+                'url'                => 'session/:sessionId',
+                'no_content_success' => 0
             },
             'getCurrentWindowHandle' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/window_handle'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/window_handle',
+                'no_content_success' => 0
             },
             'getWindowHandles' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/window_handles'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/window_handles',
+                'no_content_success' => 0
             },
             'getWindowSize' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/window/:windowHandle/size'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/window/:windowHandle/size',
+                'no_content_success' => 0
             },
             'getWindowPosition' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/window/:windowHandle/position'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/window/:windowHandle/position',
+                'no_content_success' => 0
             },
             'setWindowSize' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/window/:windowHandle/size'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/window/:windowHandle/size',
+                'no_content_success' => 1
             },
             'setWindowPosition' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/window/:windowHandle/position'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/window/:windowHandle/position',
+                'no_content_success' => 1
             },
             'getCurrentUrl' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/url'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/url',
+                'no_content_success' => 0
             },
             'get' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/url'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/url',
+                'no_content_success' => 1
             },
             'goForward' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/forward'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/forward',
+                'no_content_success' => 0
             },
             'goBack' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/back'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/back',
+                'no_content_success' => 0
             },
             'refresh' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/refresh'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/refresh',
+                'no_content_success' => 0
             },
             'executeScript' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/execute'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/execute',
+                'no_content_success' => 0
             },
             'executeAsyncScript' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/execute_async'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/execute_async',
+                'no_content_success' => 0
             },
             'screenshot' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/screenshot'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/screenshot',
+                'no_content_success' => 0
             },
             'availableEngines' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/ime/available_engines'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/ime/available_engines',
+                'no_content_success' => 0
             },
             'switchToFrame' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/frame'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/frame',
+                'no_content_success' => 0
             },
             'switchToWindow' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/window'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/window',
+                'no_content_success' => 0
             },
             'getAllCookies' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/cookie'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/cookie',
+                'no_content_success' => 0
             },
             'addCookie' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/cookie'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/cookie',
+                'no_content_success' => 0
             },
             'deleteAllCookies' => {
-                'method' => 'DELETE',
-                'url'    => 'session/:sessionId/cookie'
+                'method'             => 'DELETE',
+                'url'                => 'session/:sessionId/cookie',
+                'no_content_success' => 0
             },
             'deleteCookieNamed' => {
-                'method' => 'DELETE',
-                'url'    => 'session/:sessionId/cookie/:name'
+                'method'             => 'DELETE',
+                'url'                => 'session/:sessionId/cookie/:name',
+                'no_content_success' => 0
             },
             'getPageSource' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/source'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/source',
+                'no_content_success' => 0
             },
             'getTitle' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/title'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/title',
+                'no_content_success' => 0
             },
             'findElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element',
+                'no_content_success' => 0
             },
             'findElements' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/elements'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/elements',
+                'no_content_success' => 0
             },
             'getActiveElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/active'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/active',
+                'no_content_success' => 0
             },
             'describeElement' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id',
+                'no_content_success' => 0
             },
             'findChildElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/element'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/element',
+                'no_content_success' => 0
             },
             'findChildElements' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/elements'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/elements',
+                'no_content_success' => 0
             },
             'clickElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/click'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/click',
+                'no_content_success' => 0
             },
             'submitElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/submit'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/submit',
+                'no_content_success' => 0
             },
             'sendKeysToElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/value'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/value',
+                'no_content_success' => 0
             },
             'sendKeysToActiveElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/keys'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/keys',
+                'no_content_success' => 0
             },
             'sendModifier' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/modifier'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/modifier',
+                'no_content_success' => 0
             },
             'isElementSelected' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/selected'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/selected',
+                'no_content_success' => 0
             },
             'setElementSelected' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/selected'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/selected',
+                'no_content_success' => 0
             },
             'toggleElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/toggle'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/toggle',
+                'no_content_success' => 0
             },
             'isElementEnabled' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/enabled'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/enabled',
+                'no_content_success' => 0
             },
             'getElementLocation' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/location'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/location',
+                'no_content_success' => 0
             },
             'getElementLocationInView' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/location_in_view'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/location_in_view',
+                'no_content_success' => 0
             },
             'getElementTagName' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/name'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/name',
+                'no_content_success' => 0
             },
             'clearElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/clear'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/clear',
+                'no_content_success' => 0
             },
             'getElementAttribute' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/attribute/:name'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/attribute/:name',
+                'no_content_success' => 0
             },
             'elementEquals' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/equals/:other'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/equals/:other',
+                'no_content_success' => 0
             },
             'isElementDisplayed' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/displayed'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/displayed',
+                'no_content_success' => 0
             },
             'close' => {
-                'method' => 'DELETE',
-                'url'    => 'session/:sessionId/window'
+                'method'             => 'DELETE',
+                'url'                => 'session/:sessionId/window',
+                'no_content_success' => 0
             },
             'dragElement' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/element/:id/drag'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/element/:id/drag',
+                'no_content_success' => 0
             },
             'getElementSize' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/size'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/size',
+                'no_content_success' => 0
             },
             'getElementText' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/text'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/text',
+                'no_content_success' => 0
             },
             'getElementValueOfCssProperty' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/element/:id/css/:propertyName'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/element/:id/css/:propertyName',
+                'no_content_success' => 0
             },
             'mouseMoveToLocation' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/moveto'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/moveto',
+                'no_content_success' => 0
             },
             'getAlertText' => {
-                'method' => 'GET',
-                'url'    => 'session/:sessionId/alert_text'
+                'method'             => 'GET',
+                'url'                => 'session/:sessionId/alert_text',
+                'no_content_success' => 0
             },
             'sendKeysToPrompt' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/alert_text'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/alert_text',
+                'no_content_success' => 0
             },
             'acceptAlert' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/accept_alert'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/accept_alert',
+                'no_content_success' => 0
             },
             'dismissAlert' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/dismiss_alert'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/dismiss_alert',
+                'no_content_success' => 0
             },
             'click' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/click'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/click',
+                'no_content_success' => 0
             },
             'doubleClick' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/doubleclick'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/doubleclick',
+                'no_content_success' => 0
             },
             'buttonDown' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/buttondown'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/buttondown',
+                'no_content_success' => 0
             },
             'buttonUp' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/buttonup'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/buttonup',
+                'no_content_success' => 0
             },
             'uploadFile' => {
-                'method' => 'POST',
-                'url'    => 'session/:sessionId/file'
+                'method'             => 'POST',
+                'url'                => 'session/:sessionId/file',
+                'no_content_success' => 0
             },
 
             #'setVisible' => {
@@ -305,6 +373,11 @@ sub get_method {
     return $self->get_cmds->{$command}->{method};
 }
 
+sub get_no_content_success {
+    my ( $self, $command ) = @_;
+    return $self->get_cmds->{$command}->{no_content_success};
+}
+
 # This method will replace the template & return
 sub get_params {
     my ( $self, $args ) = @_;
@@ -324,6 +397,7 @@ sub get_params {
     $url =~ s/:windowHandle/$args->{'window_handle'}/;
 
     $data->{'method'} = $self->get_method($command);
+    $data->{'no_content_success'} = $self->get_no_content_success($command);
     $data->{'url'}    = $url;
 
     return $data;

+ 13 - 12
lib/Selenium/Remote/Driver.pm

@@ -443,10 +443,15 @@ sub _execute_command {
     my ( $self, $res, $params ) = @_;
     $res->{'session_id'} = $self->session_id;
     my $resource = $self->commands->get_params($res);
+
     if ($resource) {
-        my $resp =
-          $self->remote_conn->request( $resource->{'method'},
-            $resource->{'url'}, $params );
+        $params = {} unless $params;
+        my $resp = $self->remote_conn->request(
+            $resource->{method},
+            $resource->{url},
+            $resource->{no_content_success},
+            $params
+        );
         if ( ref($resp) eq 'HASH' ) {
             if ( $resp->{cmd_status} && $resp->{cmd_status} eq 'OK' ) {
                 return $resp->{cmd_return};
@@ -520,7 +525,9 @@ sub _request_new_session {
     # TODO: rewrite the testing better, this is so fragile.
     my $resp = $self->remote_conn->request(
         $self->commands->get_method('newSession'),
-        $self->commands->get_url('newSession'), $args,
+        $self->commands->get_url('newSession'),
+        $self->commands->get_no_content_success('newSession'),
+        $args,
     );
     if ( ( defined $resp->{'sessionId'} ) && $resp->{'sessionId'} ne '' ) {
         $self->session_id( $resp->{'sessionId'} );
@@ -1532,10 +1539,7 @@ sub set_window_position {
     my $res = { 'command' => 'setWindowPosition', 'window_handle' => $window };
     my $params = { 'x' => $x, 'y' => $y };
     my $ret = $self->_execute_command( $res, $params );
-    if ( $ret =~ m/200|204/g ) {
-        return 1;
-    }
-    else { return 0; }
+    return $ret ? 1 : 0;
 }
 
 =head2 set_window_size
@@ -1565,10 +1569,7 @@ sub set_window_size {
     my $res = { 'command' => 'setWindowSize', 'window_handle' => $window };
     my $params = { 'height' => $height, 'width' => $width };
     my $ret = $self->_execute_command( $res, $params );
-    if ( $ret =~ m/200|204/g ) {
-        return 1;
-    }
-    else { return 0; }
+    return $ret ? 1 : 0;
 }
 
 =head2 get_all_cookies

+ 12 - 5
lib/Selenium/Remote/RemoteConnection.pm

@@ -55,7 +55,9 @@ sub BUILD {
 
 # This request method is tailored for Selenium RC server
 sub request {
-    my ($self, $method, $url, $params) = @_;
+    my ($self, $method, $url, $no_content_success, $params) = @_;
+    $no_content_success = $no_content_success // 0;
+
     my $content = '';
     my $fullurl = '';
 
@@ -93,11 +95,11 @@ sub request {
     my $request = HTTP::Request->new($method, $fullurl, $header, $content);
     my $response = $self->ua->request($request);
 
-    return $self->_process_response($response);
+    return $self->_process_response($response, $no_content_success);
 }
 
 sub _process_response {
-    my ($self, $response) = @_;
+    my ($self, $response, $no_content_success) = @_;
     my $data; # server response 'value' that'll be returned to the user
     my $json = JSON->new;
 
@@ -131,8 +133,13 @@ sub _process_response {
         }
         elsif ($response->is_success) {
             $data->{'cmd_status'} = 'OK';
-            if (defined $decoded_json && defined $decoded_json->{'value'}) {
-                $data->{'cmd_return'} = $decoded_json->{'value'};
+            if (defined $decoded_json) {
+                if ($no_content_success) {
+                    $data->{'cmd_return'} = 1
+                }
+                else {
+                    $data->{'cmd_return'} = $decoded_json->{'value'};
+                }
             }
             else {
                 $data->{'cmd_return'} = 'Server returned status code '.$response->code.' but no data';

+ 4 - 0
t/01-driver.t

@@ -296,6 +296,10 @@ EXECUTE: {
     $elem = $driver->execute_async_script($script,'multi');
     ok($elem->isa('Selenium::Remote::WebElement'),'Executed async script');
     is($elem->get_attribute('id'),'multi','Async found proper element');
+
+    $script = 'return ""';
+    my $empty_string = $driver->execute_script($script);
+    cmp_ok($empty_string, 'eq', '', 'Empty strings are returned properly');
 }
 
 ALERT: {

+ 3 - 1
t/02-webelement.t

@@ -31,11 +31,11 @@ t::lib::MockSeleniumWebDriver::register($record,"t/mock-recordings/$mock_file");
 
 my $driver = new Selenium::Remote::Driver(browser_name => 'firefox');
 my $website = 'http://localhost:63636';
+$driver->get("$website/formPage.html");
 my $ret;
 my $elem;
 
 LINK: {
-    $driver->get("$website/formPage.html");
     $driver->find_element("//a[\@href='/index.html']")->click;
     pass('Click Link...');
     isa_ok($driver->get_active_element,"Selenium::Remote::WebElement","get_active_element");
@@ -53,6 +53,8 @@ INPUT: {
     is($ret, 'id', 'Get value (attribute)');
     $ret = $elem->get_attribute('value');
     is($ret, 'id', 'Get attribute @value');
+    $ret = $elem->get_attribute('missing-attribute');
+    ok(!$ret, 'Get attribute returns false for a missing attribute.');
     $ret = $elem->get_tag_name();
     is($ret, 'input', 'Get tag name');
 

+ 2 - 0
t/Test-Selenium-Remote-Driver-google.t

@@ -1,4 +1,6 @@
 #!/usr/bin/env perl
+use strict;
+use warnings;
 use Test::More;
 use Test::Selenium::Remote::Driver;
 

+ 8 - 2
t/bin/record.pl

@@ -7,6 +7,7 @@ unless (-d "t" && -f "dist.ini" && -f "t/01-driver.t" && -f "t/02-webelement.t")
     die "Please run this from the root of the repo.";
 }
 
+resetEnv();
 startServer();
 
 print 'Cleaning...and building...
@@ -15,7 +16,7 @@ print `dzil clean`;
 print `dzil build`;
 
 if ($^O eq 'linux') {
-    print "Headless and need a webdriver server started? Try\n\n\tDISPLAY=:1 xvfb-run --auto-servernum java -jar /usr/lib/node_modules/protractor/selenium/selenium-server-standalone-2.40.0.jar\n\n";
+    print "Headless and need a webdriver server started? Try\n\n\tDISPLAY=:1 xvfb-run --auto-servernum java -jar /usr/lib/node_modules/protractor/selenium/selenium-server-standalone-2.42.2.jar\n\n";
 }
 
 my $srdLib = glob('Selenium-Remote-Driver*/lib');
@@ -28,7 +29,7 @@ my @files = (
 my $export = $^O eq 'MSWin32' ? 'set' : 'export';
 my $executeTests = join( ' && ', map { 'perl -I' . $srdLib . ' ' . $_ } @files);
 print `$export WD_MOCKING_RECORD=1 && $executeTests`;
-killServer();
+resetEnv();
 
 sub startServer {
     if ($^O eq 'MSWin32') {
@@ -46,3 +47,8 @@ sub killServer {
         `ps aux | grep [h]ttp-server\.pl  | awk '{print \$2}' | xargs kill`;
     }
 }
+
+sub resetEnv {
+    `dzil clean`;
+    killServer();
+}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/01-driver-mock-MSWin32.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/01-driver-mock-darwin.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/01-driver-mock-linux.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/02-webelement-mock-MSWin32.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/02-webelement-mock-darwin.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/02-webelement-mock-linux.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/firefox-profile-mock-MSWin32.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/firefox-profile-mock-darwin.json


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
t/mock-recordings/firefox-profile-mock-linux.json


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است