Почему я не могу перехватить исключение неожиданного предупреждения?

#php #selenium #selenium-chromedriver #behat #mink

#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 BehatBehatHookScopeAfterStepScope;
use BehatBehatTesterExceptionPendingException;
use BehatBehatContextContext;
use BehatMinkExtensionContextMinkContext;
use WebDriverExceptionUnexpectedAlertOpen;
/**
 * 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. Возможно, вам нужно подождать, подождите 2-5 секунд для предупреждения используйте объекты страницы для очистки кода.

Ответ №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 версии 73.0

Решение

  • Обновите ChromeDriver до текущего уровня ChromeDriver версии v2.46.
  • Сохраняйте версию Chrome между уровнями Chrome v73. (согласно примечаниям к выпуску ChromeDriver версии v2.45)
  • Очистите рабочее пространство вашего проекта с помощью вашей IDE и перестройте свой проект только с необходимыми зависимостями.
  • Если ваша базовая версия веб-клиента слишком старая, удалите ее и установите последнюю GA и выпущенную версию веб-клиента.
  • Выполните перезагрузку системы.
  • Выполните ваше @Test .
  • Всегда вызывайте метод driver.quit() внутри tearDown(){} , чтобы корректно закрыть и уничтожить экземпляры WebDriver и Web Client.

Комментарии:

1. Хорошие моменты, однако проблема заключается в исключениях. Я обновился, но все та же ошибка.