selenium - 如何在不使用 perl 在 selenium 中使用睡眠的情况下等待动画完成?
问题描述
我观察到,当我用选择框填写表单时,如果我在单击打开选择框和单击选择框之间没有休眠的情况下填写所有参数,则它不会正确填写(有时似乎未选择该选项)选项。
如果我在第一次点击和第二次点击之间有一个睡眠,它似乎可以正常工作,但如果我有一大堆选择框填写表格会减慢很多。
有没有办法在某种“等待动画完成”中做到这一点?这是我使用的简化代码:
use strict;
use warnings;
use Selenium::Chrome;
use Selenium::Waiter qw/wait_until/;
my $chrome_driver_path = "chromedriver.exe";
my $driver;
my %settings = (
'binary' => $chrome_driver_path,
);
$driver = Selenium::Chrome->new(%settings);
$driver->get("http://mywebiste.com/myform_with_selectbox");
_set_select_box($driver, "myoption");
sub _set_select_box{
my ($driver, $input) = @_;
# Open selectbox
my $element_id = 'some_label';
my $element;
wait_until{ $element = ($driver->find_elements("//label[\@id='$element_id']"))[0] };
if (defined($element)){
$log->debug("element_id: '$element_id' found");
}else{
$log->error("element_id: '$element_id' could not be found");
return -1;
}
wait_until{$element->click()};
$log->debug("element_id '$element_id' clicked");
# sleep(1); here I put a sleep and it seems to work always
# Click item in selectbox
my $element_2_id = 'some_items';
my @elements;
wait_until{ @elements = ($driver->find_elements("//ul[\@id='$element_2_id']//li")) };
if (defined($elements[0])){
$log->debug("element_2_id: '$element_2_id' found");
}else{
$log->error("element_2_id: '$element_2_id' could not be found");
return -1;
}
my $selectbox_text = $config->val( 'MyOptions', $input);
return -1 if (!defined($selectbox_text));
foreach my $element_2 (@elements){
my $option_text = $element_2->get_text();
$option_text = encode('UTF-8', $option_text, Encode::FB_CROAK) if (defined($option_text)); # otherwise selenium does not return utf8
if ($option_text eq $selectbox_text){
$log->debug("selectbox_text '$selectbox_text' found");
wait_until{$element_2->click()};
$log->debug("selectbox_text '$selectbox_text' clicked");
return 1;
}else{
$log->debug("Selectbox text does not match Found: '$option_text' Expected '$selectbox_text'");
}
}
return 0;
}
解决方案
推荐阅读
- php - 能够使用 api 集成登录,但 createEnvelop 方法返回 - 连接到 API 时出错
- plsql - 在 Windows 10 上看不到下划线
- java - MongoDB 不会为嵌套文档的 _id 字段保存空值
- android - 第二次运行时Android WebView很慢
- java - Java中如何将多个值添加到数组列表中
- elasticsearch - 如何为 ELK Stack 中的节点分配 CPU、RAM、磁盘、分片?
- java - 如何使用 Spring Data JPA 处理重复的字段值?
- python - 在 np.select 中使用条件字符串时出现问题
- php - 如何通过多次重定向保留表单提交的数据?
- php - 如何将输入中的值传递给 sum 方法