如何使用Mink,Selenium 2和Behat与弹出窗口进行交互?

时间:2013-05-23 18:55:16

标签: selenium popup selenium-webdriver behat mink

我正在通过Behat的内部网站运行,并且在大多数情况下它运行得非常好。但问题是,在网站的某些部分,我们有弹出窗口来完成一个动作。在这种情况下,我们点击“提取”按钮,弹出窗口让您选择原因并保存。

在一个理想的世界中,如果我真的设计了这个应用程序,该网站将不会使用任何弹出窗口。但我是应该实施自动功能测试的新人(我正在学习如何从头开始实现这一目标)。所以我现在对网站设计没有任何发言权(虽然随着时间的推移我会推动很多变化)。

我在Ubuntu 12.10系统上使用Mink和Selenium 2驱动程序运行Behat(最终必须在Windows环境中运行一些测试以便在IE中进行测试)。我也在使用PhantomJS进行我设置的一些测试。

无论如何,Behat / Mink是否支持通过Selenium 2驱动程序(或通过PhantomJS)以某种方式使用弹出窗口?我在所有这些自动化设置中都很早,而且我只是在尝试使用工具。如果有更好的工具可以处理这个,请告诉我。

我的主要问题是如何让Behat / Mink与弹出窗口一起使用,选中一个框,填写一个字段,然后单击保存按钮?除了让它直接与新弹出的窗口进行交互外,我知道如何做所有事情。欢迎任何想法/建议。

谢谢!

2 个答案:

答案 0 :(得分:3)

事实证明,Mink包含一些窗口切换功能,但无法识别所述窗口。所以我编写了两个函数getWindowName()和getWindowNames()来分别标识当前窗口和所有打开的窗口。我将这些更改提交到GitHub中的项目,似乎我的修复程序很快就会在代码库中实现。

但是通过这些更改我可以切换窗口没问题。

链接:https://github.com/Behat/Mink/pull/341

答案 1 :(得分:2)

通过设置窗口的焦点,我们也可以命名这些窗口,以便将来再次访问它们。

使用此方法,我们可以轻松地在弹出窗口之间切换并继续测试......

    /**
 * @Then I switch to popup :name
 *
 * @param $name
 */
public function iSwitchToPopup($name)
{
    $this->iSetMainWindowName();
    $this->getSession()->switchToWindow($name);
}

/**
 * @Then I set main window name
 */
public function iSetMainWindowName()
{
    $window_name = 'main_window';
    $script = 'window.name = "' . $window_name . '"';
    $this->getSession()->executeScript($script);
}

/**
 * @Then I switch back to main window
 */
public function iSwitchBackToMainWindow()
{
    $this->getSession()->switchToWindow('main_window');
}