Преглед изворни кода

Fix #272: stop sleeping $interval after success

Daniel Gempesaw пре 9 година
родитељ
комит
71c1444f45
2 измењених фајлова са 11 додато и 2 уклоњено
  1. 5 2
      lib/Selenium/Waiter.pm
  2. 6 0
      t/Waiter.t

+ 5 - 2
lib/Selenium/Waiter.pm

@@ -87,8 +87,9 @@ sub wait_until (&%) {
 
     my $exception = '';
     while ($timeout_not_elapsed->()) {
+        my $assert_ret;
         my $try_ret = try {
-            my $assert_ret = $assert->();
+            $assert_ret = $assert->();
             return $assert_ret if $assert_ret;
         }
         catch {
@@ -97,7 +98,9 @@ sub wait_until (&%) {
             return '';
         }
         finally {
-            sleep($args->{interval});
+            if (! $assert_ret) {
+                sleep($args->{interval});
+            }
         };
 
         return $try_ret if $try_ret;

+ 6 - 0
t/Waiter.t

@@ -34,6 +34,12 @@ EXCEPTIONS: {
       'exceptions usually only warn once';
 }
 
+NO_FINALLY_WAIT: {
+    waits_ok( sub { wait_until { 1 }, interval => 10 }, '<', 1,
+              'does not do interval wait on success')
+
+}
+
 sub waits_ok  {
     my ($sub, $cmp, $expected_duration, $test_desc) = @_;