Procházet zdrojové kódy

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 před 9 roky
rodič
revize
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...');

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 3 - 3
t/mock-recordings/01-driver-mock-darwin.json


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 6 - 6
t/mock-recordings/01-driver-mock-linux.json


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů