为什么我无法捕获意外警报异常?

时间:2019-03-16 15:59:47

标签: php selenium selenium-chromedriver behat mink

我正在使用try catch块来捕获异常,但仍无法捕获,因为它仍然显示:

在Exception.php第155行中:

  unexpected alert open: {Alert text : The form is not complete and has not been submitted yet. There is 1 problem with your submission.}
    (Session info: chrome=73.0.3683.75)
    (Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.15.0-38-generic x86_64)

我的功能文件:

<?php

use Behat\Behat\Hook\Scope\AfterStepScope;
use Behat\Behat\Tester\Exception\PendingException;
use Behat\Behat\Context\Context;
use Behat\MinkExtension\Context\MinkContext;
use WebDriver\Exception\UnexpectedAlertOpen;
/**
 * Defines application features from the specific context.
 */
class FeatureContext extends MinkContext implements Context
{
    /**
     * Initializes context.
     *
     * Every scenario gets its own context instance.
     * You can also pass arbitrary arguments to the
     * context constructor through behat.yml.
     */
    public function __construct()
    {

    }

    /**
     * @Given I fill in the email field with :email
     */
    public function iFillInTheEmailFieldWith($email)
    {

        dump($email);
        $this->visit('/471w2222');
        $page = $this->getSession()->getPage();
        $page->find('xpath', '//*[@id="tfa_1111"]')->setValue($email);
    }


    /**
     * @When I submit the form
     */
    public function iSubmitTheForm()
    {

        try {
            $page = $this->getSession()->getPage();
            $page->find('xpath', '//*[@id="submit_button"]')->click();
        }
        catch (UnexpectedAlertOpen $e){
            dd($e->getMessage());
            $this->getSession()->getDriver()->getWebDriverSession()->accept_alert();
        }

    }

}

警报出现:

$page->find('xpath', '//*[@id="submit_button"]')->click();

执行。但是它无法捕捉到它。为什么?

1 个答案:

答案 0 :(得分:1)

根据错误消息...

(Session info: chrome=73.0.3683.75)
(Driver info: chromedriver=2.41.578700 (2f1ed5f9343c13f73144538f15c00b370eda6706),platform=Linux 4.15.0-38-generic x86_64)

...主要问题是正在使用的二进制版本之间的不兼容,如下所示:

  • 您正在使用 chromedriver = 2.41
  • chromedriver=2.41的发行说明中明确提到以下内容:
  

支持 Chrome v67-69

  • 您正在使用 chrome = 73.0
  • ChromeDriver v2.46的发行说明中明确提到以下内容:
  

支持 Chrome v71-73

因此 ChromeDriver v2.41 Chrome浏览器v73.0

之间存在明显的不匹配

解决方案

  • ChromeDriver 升级到当前的ChromeDriver v2.46级别。
  • Chrome 版本保持在 Chrome v73 级别之间。 (as per ChromeDriver v2.45 release notes
  • 通过您的 IDE
  • 清理您的项目工作区重建您的项目,并且仅具有必需的依赖项。
  • 如果您的基本 Web客户端版本太旧,则将其卸载并安装最新版本的 Web客户端 GA。
  • 进行系统重启
  • 执行您的@Test
  • 始终在driver.quit()方法内调用tearDown(){},以优雅地关闭和销毁 WebDriver Web Client 实例。