如何使用PHP behat / mink selenium2 chrome webdriver处理javascript警报窗口

问题描述 投票:2回答:3

在测试时,我得到一个javascript警告框,我尝试关闭它,但我收到错误意外警报打开:{警告文本:确定删除此排除?}

我正在尝试使用:

$this->driver = new Selenium2Driver('chrome');
$this->driver->getWebDriverSession()->accept_alert();

什么是使用PHP behat / mink selenium2 chrome webdriver关闭警报框的正确方法?

使用Behat 3.2.0 mink 1.7.1

javascript php google-chrome selenium mink
3个回答
2
投票

你能检查一下吗?

$this->getSession()->getDriver()->getWebDriverSession()->accept_alert();

要么

您可以尝试更新featureContext.php文件中的ConfirmPopup函数,如下所示

public function iConfirmPopup()
{
$this->getMainContext()->getSession()->getDriver()->getWebDriverSession()->accept_alert();
}

在featureContext.php文件中添加它

参考链接solution to use alert(), confirm() and prompt() in Selenium2Driver


1
投票

您不需要为此方法创建Selenium2Driver。对于Behat 3,如果将其添加到扩展Page对象的对象中,这应该可行。

public function iConfirmThePopup(){
    $i = 0;
    while($i < 5) {
        try {
            $this->getDriver()->getWebDriverSession()->accept_alert();
            break;
        }
        catch(NoAlertOpenError $e) {
            sleep(1);
            $i++;
        }
    }
}

并添加到类的开头:

use WebDriver\Exception\NoAlertOpenError;

您可以根据需要自定义方法,如果不需要,可以删除while和try-catch。

UPD:修复了代码格式


0
投票

我觉得这个功能真的对我有用:

public function acceptAlert()
{
    $driver = $this->getDriver();
    if ($driver instanceof Selenium2Driver) {
        for ($i = 0; $i < 10; $i++) {
            try {
                $driver->getWebDriverSession()->accept_alert();
                break;
            }
            catch (NoAlertOpenError $e) {
                sleep(2);
                $i++;
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.