selenium - 如果超时如何让wait_until死
问题描述
use Selenium::Waiter 'wait_until';
use Selenium::Remote::Driver;
$selen = Selenium::Remote::Driver->new( ... );
$elem = wait_until { $selen->find_element('//h1[@class="banner-heading"]') };
在上面的代码中,如果没有找到正在查找的元素,或者wait_until
超时,我希望脚本死掉。我怎样才能做到这一点?的默认行为wait_until
是在超时时返回一个空字符串。
解决方案
正如Selenium::Waiter
医生所说的那样
请在继续之前检查返回值,因为我们不明智地抑制了您的 BLOCK 可能进行的任何死亡或呱呱叫的尝试。您传递的 BLOCK 在 a
"try" in Try::Tiny
中调用,如果您的函数调用中的任何一个 throw 并且 BLOCK 永远不会变为真,我们将在返回 false 之前恰好在结束时恰好一次 carp。
然后继续允许我们纾困
如果你还是想死,只需将 die => 1 传递给 wait_until :
# Dies on the first failure, do your own error handling: wait_until { die 'oops' } die => 1;
我已经对其进行了测试,并且可以正常工作。还可以调整等待时间和重试间隔。
请注意文档的警告以确保将implicit_wait
fromSelenium::Remote::Driver
设置为低值(默认情况下,但如果
调用 set_implicit_wait_timeout可能会更改)。
至于因找不到 find_element 而死,Selenium::Remote::Driver
默认情况下会这样做
如果找不到该元素,我们将 CROAK,杀死您的脚本。
所以
my $elem = wait_until { $selen->find_element(...) } die => 1;
应该做你需要的。
推荐阅读
- javascript - 如何使用ajax jquery发送多个数据?
- python-3.x - 我正在使用 python,但我无法使用 openCV 检测 QR 码
- angular - 以角度 6 实现虚拟滚动
- reactjs - 无法在 express 中获取我的数据并做出反应错误:无法在窗口上执行 feth
- c - 如何在 C 中创建和读取数据类型的动态数组?
- twitter-bootstrap - “未定义变量”搜索功能
- unity3d - 从统一 webGL 向 Vue js 发送消息
- android - Android Studio 中的奇怪错误 - 为什么未解决?
- xpath - Xpath 定位器到相同的 Web 元素
- angularjs - Ionic Angular - 如何用 URI 的前缀替换特殊字符