我正在尝试为网站开发测试。通常情况下,它会进入主页面,点击搜索按钮进入结果页面,点击第一个链接到产品页面。
但是,有时在加载第一页时,会出现一个对话框弹出窗口,询问用户显示更好内容的位置。
我对Selenium比较陌生,但我对此做了大量的研究,似乎找不到合适的答案。也许我只是不确切地知道要搜索什么。
如何执行条件说明如果弹出框,单击第一个选项,然后单击,检查通常会出现的页面内容?
请注意,我知道如何测试元素等,我只是不明白如何做条件位。此外,我将此导出到Perl之后,如果这有任何区别。
提前致谢!
编辑:这是脚本原样。
use strict;
use warnings;
use Time::HiRes qw(sleep);
use Test::WWW::Selenium;
use Test::More "no_plan";
use Test::Exception;
use TimePerf2;
my $time= TimePerf2->new(60,90,120);
my $sel = Test::WWW::Selenium->new( host => "my_lan_ip",
port => 4444,
browser => "*firefox",
browser_url => "https://www.website.com/" );
$time->startTime("ALL");
$sel->set_timeout_ok("120000");
if ( ! $sel->open_ok("https://www.website.com/") ) {print "Location: " . $sel->get_location() . "\n";}
elsif ( ! $sel->set_speed("1500") ) { }
elsif ( ! $sel->click_ok("id=btnSearch") ) {print "Location: " . $sel->get_location() . "\n";}
elsif ( ! $sel->wait_for_page_to_load_ok("120000") ) {}
elsif ( ! $sel->is_element_present_ok("css=div.azi_result") ) {print "Location: " . $sel->get_location() . "\n";}
elsif ( ! $sel->click_ok("css=p.description a") ) {print "Location: " . $sel->get_location() . "\n";}
elsif ( ! $sel->wait_for_page_to_load_ok("120000") ) {}
elsif ( !$time->endTime("ALL") ) { }
else { $time->getTimes(); }
$sel->stop();
答案 0 :(得分:0)
你可以这样写:
List<WebElement> popUps = driver.findElements(By.yourLocator);
if (popUps.size() > 0) {
skipPopup(popUps.get(0));
}
...normal flow...
在这个片段中,我们创建一个由一些常用定位器标识的弹出窗口列表,然后检查此列表是否为空。如果是,则没有找到弹出窗口,我们可以继续正常流动。如果列表不为空,那么我们有一个弹出窗口,然后我们跳过。跳过的逻辑(通常单击取消等)在skipPopup()方法中描述,该方法由列表的第一个元素提供。这是一个简单的变体,因为我们假设可以有一个弹出或零。如果一次可以有多个弹出窗口,我们需要浏览列表并跳过我们找到的每个弹出窗口。如果弹出窗口逐个出现,在前一个关闭后,我们需要在循环内调用findElements。更改web驱动程序在findElements方法中使用的隐式等待期的持续时间也很有用,并且可以大大影响测试的性能(请参阅此处的解释和示例:Selenium WebDriver - Test if element is present)。