有没有办法使用mink的webdriver扩展名自动接受未处理的警报?

时间:2012-10-04 14:39:57

标签: php webdriver behat mink

所以我注意到Java能够使用Selenium 2.25.0提供的UnexpectedAlertBehaviour功能处理意外警报。你可以看到CHANGELOG。总是接受警报并继续脚本对我有帮助,因为我无法总是预测它们何时会弹出。

如果您使用Drupal的ctools进行任何编码并且它是ajax框架,您将理解为什么...... Selenium有时会因为ajax调用完成而过快,而ctools会抛出一个对话框,解释为什么ajax调用没有错误完成。

最后,甚至可以使用webdriver的rest API(mink的webdriver来自哪个)来执行此功能?有没有人知道如何通过mink或behat使用mink(通过yaml或php代码)进行设置?

2 个答案:

答案 0 :(得分:2)

您可以添加一些js,以便在使用此步骤def

运行功能时禁用警报
/**
 * @When /^I disable the alerts$/
 */
public function iDisableTheAlerts()
{
   $javascript = <<<JS
       window.alert = function() {}; 
   JS;       
   $this->getSession()->executeScript($javascript);
}

这实际上只是覆盖alert函数并执行null返回,以便任何js继续运行。

根据您的浏览器,如果不起作用,您可能需要尝试不同的覆盖方式。

你可以在你的应用程序中完全禁用警报,而不是通过behat注入它,但这仍然可以保留警报,因为某种......咳嗽......“设计所需的功能”。

答案 1 :(得分:0)

我正在使用Selenium for PHP,这是我的工作解决方案:

try {
    // actions to open alert
} catch (UnexpectedAlertOpenException $e) {
    if ($i->isWebDriver()) {
        $i->executeInSelenium(function (\RemoteWebDriver $webDriver) {
            $webDriver->switchTo()->alert()->dismiss();
        });
    }
}