4

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

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

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

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

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

谢谢!

4

2 回答 2

3

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

但是通过这些更改,我可以毫无问题地切换窗口。

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

于 2013-06-28T18:39:49.530 回答
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');
}
于 2015-12-14T17:26:05.340 回答