【问题标题】:Selenium IDE - Dealing with occasional programmed popupsSelenium IDE - 处理偶尔的编程弹出窗口
【发布时间】:2017-09-25 09:58:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: selenium firefox selenium-ide


    【解决方案1】:

    你可以这样写:

    List<WebElement> popUps = driver.findElements(By.yourLocator);
    if (popUps.size() > 0) {
        skipPopup(popUps.get(0));
    }
    ...normal flow...
    

    在这个片段中,我们创建了一个由一些常用定位器标识的弹出窗口列表,然后检查这个列表是否为空。如果是,则没有找到弹出窗口,我们可以继续正常流程。如果列表不为空,那么我们有一个弹出窗口,然后我们会跳过它。跳过的逻辑(通常单击取消等)在 skipPopup() 方法中描述,该方法提供列表的第一个元素。这是一个简单的变体,因为我们假设可能有一个弹出窗口或零个。如果一次可以有多个弹出窗口,我们需要遍历列表并跳过我们找到的每个弹出窗口。如果弹出窗口一个一个出现,在上一个关闭后,我们需要在循环内调用 findElements。更改在 findElements 方法中使用的 Web 驱动程序的隐式等待周期的持续时间也很有用,它会极大地影响测试的性能(请参阅此处的解释和示例:Selenium WebDriver - Test if element is present)。

    【讨论】:

    • 您好 Gyrotank,感谢您的回答。我为菜鸟道歉,你能解释一下这是做什么的吗?另外,除了我需要在那里输入的定位器之外,我自己的哪些信息?
    • 嗨!将 cmets 添加到答案中,因为它们太长而无法放入评论中。
    • 应该,不过最好先检查一下 IDE。
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多