如何在不使用perl的硒睡眠中等待动画完成?

问题描述

我观察到,当我用选择框填写表单时,如果我在单击以打开选择框和单击之间没有进行睡眠就填写了所有参数,则它不会填充正确性(似乎有时未选择该选项)。选择一个选项。

如果我在第一次单击和第二次单击之间有一个睡眠,这似乎可以正常工作,但是如果我有一大堆选择框,则填充表格的速度会大大降低。

是否可以通过某种“等待动画完成”的方式来执行此操作?这是我使用的简化代码

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;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)