如何使用phantomjs + behat + mink处理确认弹出窗口

时间:2013-08-07 14:29:43

标签: symfony phantomjs behat travis-ci mink

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

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

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

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

获取信息:

  • symfony:2.0.23
  • behat:2.4.6
  • 水貂:1.5.0
  • Symfony2Extension:1.0.2
  • MinkExtension: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

2 个答案:

答案 0 :(得分:0)

我更新了我的" Selenium2Driver.php"以下内容:

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

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

因此,在脚本中,您可以执行此操作以接受警报。

$这 - >的getSession() - > getDriver() - > acceptAlert();

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

答案 1 :(得分:0)

void bitcheck() { int i; for(i=0;i<NELEMS(array); i++) { delay(); AP_CMU->DIVIDER = freq_def[0]; encryption(array,i); delay(); // LCD_DisplayUint32(i,0,array[i]); AP_CMU->DIVIDER = freq_def[6]; delay_ex(10); decryption(intr_array,i); delay_ex(10); // LCD_DisplayUint32(i,10,array[i]); } } void delay() { int i; for (i = 0; i < 100000; i++) { __NOP(); } } void delay_ex(int j) { for(int s=0; s < j; s++) { for ( int i = 0; i < 10000; i++) { __NOP(); } } } 是一个无头浏览器,因此所有对话框都不显示,无法与之交互。解决方案是使用您自己的返回预定义值的函数重写phantomjswidnow.confirm

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

window.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;}');
}