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

4

我正在使用Behat测试内部网站,大部分情况下都非常顺利。但问题是,在网站的某些部分,我们有弹出窗口来完成一个操作。在这种情况下,我们点击"撤回"按钮,然后会弹出一个窗口让您选择原因并保存。

在理想的情况下,如果我真的设计了这个应用程序,该网站将不使用任何弹出窗口。但我是一个新手,应该实现自动化功能测试(我正在从头开始学习如何做到这一点)。所以我没有任何对网站设计的发言权(尽管时间过去后我会推动很多变化)。

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

无论如何,Behat/Mink是否支持通过Selenium 2驱动程序(或通过PhantomJS)处理弹出窗口?我在所有这些自动化设置中都处于早期阶段,而且我只是在试验工具。如果有更好的工具可以处理此事,请告诉我。

我的主要问题是如何让Behat/Mink与弹出窗口配合使用,勾选框,填写字段并单击保存按钮?除了直接与新弹出的窗口进行交互外,我知道如何做任何事情。任何想法/建议都将受到欢迎。

谢谢!

2个回答

3

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

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

    /**
 * @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');
}

3
原来Mink包含了一些窗口切换功能,但没有办法识别这些窗口。因此,我编写了两个函数getWindowName()和getWindowNames(),分别用于识别当前窗口和所有打开的窗口。我已经将这些更改提交到GitHub项目中,看起来我的修复很快就会被实现到代码库中。
但是,通过这些更改,我可以轻松地切换窗口。
链接:https://github.com/Behat/Mink/pull/341

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接