Просмотр исходного кода

Find child element default finder fix (#270)

* Stop suggesting linux help when making recordings

The docker image in gempesaw/docker-selenium-remote-driver takes care of
everything for us.

* Tweak error handler test in 01-driver.t

It wasn't calling the error handler for a find_element, oddly. I can't
recall if this is expected behavior ?

* Fix find_child_element() and find_child_elements() not working with default_finder

When not explicitly passing a locator scheme to find_child_element(s),
default_finder was erronously looked up in FINDERS again. This just
happens to work for finders like xpath that are called the same in either
case but breaks for e.g. css which maps to "css selector".
Fixed by using the same correct code as in find_element() and find_elements().

* Add test to exercise default finder bug from #256

* Update os x bindings for #256

* Update linux bindings for #256

Fix #256
Daniel Gempesaw 9 лет назад
Родитель
Сommit
071a1b0fea

+ 8 - 6
lib/Selenium/Remote/Driver.pm

@@ -2077,10 +2077,11 @@ sub find_child_element {
     if ( ( not defined $elem ) || ( not defined $query ) ) {
         croak "Missing parameters";
     }
-    my $using = ( defined $method ) ? $method : $self->default_finder;
-    if ( exists $self->FINDERS->{$using} ) {
+    my $using =
+      ( defined $method ) ? $self->FINDERS->{$method} : $self->default_finder;
+    if ( defined $using ) {
         my $res = { 'command' => 'findChildElement', 'id' => $elem->{id} };
-        my $params = { 'using' => $self->FINDERS->{$using}, 'value' => $query };
+        my $params = { 'using' => $using, 'value' => $query };
         my $ret_data = eval { $self->_execute_command( $res, $params ); };
         if ($@) {
             if ( $@
@@ -2138,10 +2139,11 @@ sub find_child_elements {
     if ( ( not defined $elem ) || ( not defined $query ) ) {
         croak "Missing parameters";
     }
-    my $using = ( defined $method ) ? $method : $self->default_finder;
-    if ( exists $self->FINDERS->{$using} ) {
+    my $using =
+      ( defined $method ) ? $self->FINDERS->{$method} : $self->default_finder;
+    if ( defined $using ) {
         my $res = { 'command' => 'findChildElements', 'id' => $elem->{id} };
-        my $params = { 'using' => $self->FINDERS->{$using}, 'value' => $query };
+        my $params = { 'using' => $using, 'value' => $query };
         my $ret_data = eval { $self->_execute_command( $res, $params ); };
         if ($@) {
             if ( $@

+ 6 - 0
t/01-driver.t

@@ -270,6 +270,12 @@ FIND: {
     $elem = $driver->find_element('checky', 'name');
     ok($elem->isa('Selenium::Remote::WebElement'), 'Got WebElement via Name');
 
+    $driver->default_finder('css');
+    $elem = $driver->find_element('#multi');
+    $elem = $driver->find_child_element($elem, "option[selected]");
+    ok($elem->isa('Selenium::Remote::WebElement'), 'Got child WebElement...');
+    $driver->default_finder('xpath');
+
     $elem = $driver->find_element('multi', 'id');
     $elem = $driver->find_child_element($elem, "option");
     ok($elem->isa('Selenium::Remote::WebElement'), 'Got child WebElement...');

Разница между файлами не показана из-за своего большого размера
+ 3 - 3
t/mock-recordings/01-driver-mock-darwin.json


Разница между файлами не показана из-за своего большого размера
+ 6 - 6
t/mock-recordings/01-driver-mock-linux.json


Некоторые файлы не были показаны из-за большого количества измененных файлов