0

因此,我注意到 Java 能够使用 Selenium 2.25.0 附带的 UnexpectedAlertBehaviour 功能来处理意外警报。您可以看到CHANGELOG。始终接受警报并继续执行脚本对我很有帮助,因为我无法始终预测它们何时会弹出。

如果您使用 Drupal 的 ctools 和它的 ajax 框架进行了任何编码,您就会明白为什么...... Selenium 有时会太快而无法完成 ajax 调用,并且 ctools 会弹出一个对话框,解释为什么 ajax 调用没有完成的错误.

所以最后,是否有可能使用 webdriver 的 rest API(从哪个 mink 的 webdriver 驱动)来执行这个功能?有谁知道如何通过 mink 或 behat 使用 mink 设置它(通过 yaml 或 php 代码)?

4

2 回答 2

2

您可以添加一些 js 以在使用此步骤 def 运行功能时禁用警报

/**
 * @When /^I disable the alerts$/
 */
public function iDisableTheAlerts()
{
   $javascript = <<<JS
       window.alert = function() {}; 
   JS;       
   $this->getSession()->executeScript($javascript);
}

这实际上只是覆盖了警报函数并返回空值,以便任何 js 都可以继续运行。

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

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

于 2013-01-08T04:28:34.653 回答
0

我将 Selenium 用于 PHP,这是我的工作解决方案:

try {
    // actions to open alert
} catch (UnexpectedAlertOpenException $e) {
    if ($i->isWebDriver()) {
        $i->executeInSelenium(function (\RemoteWebDriver $webDriver) {
            $webDriver->switchTo()->alert()->dismiss();
        });
    }
}
于 2015-12-29T17:02:54.260 回答