5

在我的测试中,我使用此步骤来确认 javascript 确认弹出窗口:

/**
 * @when /^(?:|I )confirm the popup$/
 */
public function confirmPopup()
{
    $this->getSession()->getDriver()->getWebDriverSession()->accept_alert();
}

此步骤适用于 selenium2 和 chrome/firefox,但不适用于phantomjs

如何使用 phantomjs 处理确认弹出窗口?

信息:

  • symfony:2.0.23
  • 行为:2.4.6
  • 貂皮:1.5.0
  • Symfony2 扩展:1.0.2
  • Mink 扩展:1.1.4
  • MinkBrowserKitDriver:1.1.0
  • MinkSelenium2Driver:1.1.0
  • phamtomjs 1.9.1

behat.yml

default:
    extensions:
        Behat\Symfony2Extension\Extension:
            mink_driver: true
        Behat\MinkExtension\Extension:
            base_url: "http://localhost:8000/app_test.php"
            default_session: selenium2
            selenium2:
                wd_host: "http://localhost:9876/wd/hub"

谢谢!

PS:这里的要点:https ://gist.github.com/blazarecki/2888851

4

2 回答 2

0

我用以下内容更新了我的“Selenium2Driver.php”:

public function acceptAlert()
{
$this->wdSession->accept_alert();
}

这使得 accept_alert() 可用于驱动程序。

所以在脚本中,你可以做一些事情来接受警报。

$this->getSession()->getDriver()->acceptAlert();

请注意,我使用的是 RawMinkContext 而不是本机 MinkContext

于 2014-06-24T10:34:21.277 回答
0

phantomjs是一个无头浏览器,因此不会显示所有对话框并且无法与之交互。一种解决方案是重写widnow.confirmwindow.alert使用您自己的返回预定义值的函数。

由于场景在同一个驱动程序中运行,因此使用预定义的返回值覆盖本机方法是非常安全的(您不会遇到真正需要在同一场景中查看窗口的情况)。此外,在一个场景中多次调用这些步骤定义来翻转返回值是安全的。

/**
 * @When I accept confirmation dialogs
 */
public function acceptConfirmation() {
  $this->getSession()->getDriver()->executeScript('window.confirm = function(){return true;}');
}

/**
 * @When I do not accept confirmation dialogs
 */
public function acceptNotConfirmation() {
  $this->getSession()->getDriver()->executeScript('window.confirm = function(){return false;}');
}

场景示例:

Scenario: Removal of something with confirmation dialog
Given I accept confirmation dialogs
And I click a ".mylink" element
And I wait for AJAX to finish
And I should not see a ".some-removed-element" element
于 2017-03-09T13:43:54.240 回答