Procházet zdrojové kódy

Fixed find_no_element_ok, now uses the same logic as other _ok functions

Emmanuel Peroumalnaik před 11 roky
rodič
revize
5c16eac2c2

+ 3 - 11
lib/Test/Selenium/Remote/Driver.pm

@@ -45,6 +45,7 @@ sub has_args {
     my $fun_name      = shift;
     my $hash_fun_args = {
         'find_element'     => 2,
+        'find_no_element_ok' => 2,
         'find_child_element'     => 3,
         'find_child_elements'     => 3,
         'find_element'     => 2,
@@ -286,17 +287,8 @@ for C<find_no_element_ok()>.
 =cut
 
 sub find_no_element_ok {
-    my $self          = shift;
-    my $search_target = shift;
-    my $desc          = shift;
-    my $rv = 0 ;
-    local $Test::Builder::Level = $Test::Builder::Level + 1;
-    try {
-        $self->find_element($search_target)
-    } catch {
-        $rv = 1 if ($_);
-    };
-    return $self->ok($rv == 1,$desc);
+    my $self = shift;
+    $self->_check_ok('find_no_element_ok',@_);
 }
 
 =head2 $twd->content_like( $regex [, $desc ] )

+ 15 - 2
lib/Test/Selenium/Remote/Role/DoesTesting.pm

@@ -39,16 +39,19 @@ sub _check_method {
 }
 
 # main method for _ok tests
+# a bit hacked so that find_no_element_ok can also be processed
+# TODO: maybe simplify a bit the logic 
 
 sub _check_ok {
     my $self   = shift;
     my $method = shift;
+    my $real_method = '';
     my @args   = @_;
     my ($rv, $num_of_args, @r_args);
     try {
         $num_of_args = $self->has_args($method);
         @r_args = splice( @args, 0, $num_of_args );
-        if ($method =~ m/^find_element/) { 
+        if ($method =~ m/^find(_no)?_element/) { 
             # case find_element_ok was called with no arguments    
             if (scalar(@r_args) == 1) { 
                 push @r_args, $self->default_finder; 
@@ -84,10 +87,20 @@ sub _check_ok {
                 }
             }
         }
+        if ($method eq 'find_no_element_ok') { 
+            $real_method = $method;
+            $method = 'find_element'; 
+        }
         $rv = $self->$method(@r_args);
     }
     catch {
-        $self->croak($_);
+        if ($real_method) {
+            $method = $real_method;
+            $rv     = 1;
+        }
+        else {
+            $self->croak($_);
+        }
     };
 
     my $default_test_name = $method;

+ 1 - 1
t/Test-Selenium-Remote-Driver.t

@@ -67,7 +67,7 @@ $successful_driver->find_element_ok('p','class','find_element_ok with a locator
 $successful_driver->find_child_element_ok({id => 1},'p','class','find_child_element_ok with a locator works');
 dies_ok{ $successful_driver->find_child_element_ok({id => 1200}) } 'find_child_element_ok dies if the element is not found';
 dies_ok { $successful_driver->find_element_ok('notq') } 'find_element_ok dies if element not found';
-$successful_driver->find_no_element_ok('notq','find_no_element_ok works');
+$successful_driver->find_no_element_ok('notq','xpath','find_no_element_ok works');
 $successful_driver->content_like( qr/matches/, 'content_like works');
 $successful_driver->content_unlike( qr/nomatch/, 'content_unlike works');
 $successful_driver->find_elements_ok('abc','find_elements_ok works');