Selenium IDE - 处理偶尔编程的弹出窗口

时间:2017-04-27 14:25:12

标签: selenium firefox selenium-ide

我正在尝试为网站开发测试。通常情况下,它会进入主页面,点击搜索按钮进入结果页面,点击第一个链接到产品页面。

但是,有时在加载第一页时,会出现一个对话框弹出窗口,询问用户显示更好内容的位置。

我对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();

1 个答案:

答案 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)。