我正在通过Behat的内部网站运行,并且在大多数情况下它运行得非常好。但问题是,在网站的某些部分,我们有弹出窗口来完成一个动作。在这种情况下,我们点击“提取”按钮,弹出窗口让您选择原因并保存。
在一个理想的世界中,如果我真的设计了这个应用程序,该网站将不会使用任何弹出窗口。但我是应该实施自动功能测试的新人(我正在学习如何从头开始实现这一目标)。所以我现在对网站设计没有任何发言权(虽然随着时间的推移我会推动很多变化)。
我在Ubuntu 12.10系统上使用Mink和Selenium 2驱动程序运行Behat(最终必须在Windows环境中运行一些测试以便在IE中进行测试)。我也在使用PhantomJS进行我设置的一些测试。
无论如何,Behat / Mink是否支持通过Selenium 2驱动程序(或通过PhantomJS)以某种方式使用弹出窗口?我在所有这些自动化设置中都很早,而且我只是在尝试使用工具。如果有更好的工具可以处理这个,请告诉我。
我的主要问题是如何让Behat / Mink与弹出窗口一起使用,选中一个框,填写一个字段,然后单击保存按钮?除了让它直接与新弹出的窗口进行交互外,我知道如何做所有事情。欢迎任何想法/建议。
谢谢!
答案 0 :(得分:3)
事实证明,Mink包含一些窗口切换功能,但无法识别所述窗口。所以我编写了两个函数getWindowName()和getWindowNames()来分别标识当前窗口和所有打开的窗口。我将这些更改提交到GitHub中的项目,似乎我的修复程序很快就会在代码库中实现。
但是通过这些更改我可以切换窗口没问题。
答案 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');
}