Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Решено] Codeception-WebDriver как бороться с попапом с вопросом: "уверенны ли Вы что хотите покинуть страницу?" при падении теста.

codeception
webdriver
php
Теги: #<Tag:0x00007f7b6d1e49d0> #<Tag:0x00007f7b6d1e4840> #<Tag:0x00007f7b6d1e46b0>

(Maksym Polynskyi) #1

Привет. Я уверен, что не один у кого тесты ломаются из-за этого попапа.

В чем суть: Тест (Cest) А проходит на странице которую покинуть можно только подтвердив свой уход во всплывающем окошке. И если тест А ломается, то все остальные тесты (Cest’ы) которые будут проходить дальше не смогут перейти на свою страницу из-за попапа на странице теста А. В итоге они все “Error”, а на всех скриншотах злополучная страница с теста А.

Может кто-то пример показать хука _failed который открывает новую пустую страницу, а старую закрывает с $I->acceptPopup(); ?

Или может есть другой способ который я из-за неопытности не вижу?


(Михайло Єдемський) #2

Как воркераунд можно перегрузить onbeforeunload метод для страницы


(Tatyana) #3

А если, как вариант, проверять наличие попапа в начале кейса?
Если есть - то закрыл, если нет - то сразу идем дальше?


(Александр Таранков) #4

Тема о том, почему надо в каждом тесте открывать новый браузер (и закрывать по завершении), а не решать несуществующие проблемы, оставленные следующему тесту предыдущим


(Александр Таранков) #5

Тем не менее ход мысли @Monvic верный.

  1. можно в BeforeTest переходить на дефолтную страницу (например, Главная) путем drivet.get(<здесь урл>) и таким образом игнорировать все оставшиеся от предыдущего теста проблемы
  2. Если попап и этому может мешать, то можно в AfterTest-методе пробовать обнаружить типичные проблемы, которые может за собой оставить упавший тест (тот же открытый Alert) и устранять их (подчищать за собой), чтобы следующий тест мог продолжать работу.

P.S. BeforeTest / AfterTest - методы, которые вызываются фреймворком перед/после каждым тестом. Как это организовано в Codeception я не знаю, но по идее аналоги должны быть


(Maksym Polynskyi) #6

@joemast
After test не пойдет, потому что уход со страницы с попапом инициируется уже другим тестом.
@Monvic
Спасибо это попробую.


(Maksym Polynskyi) #7

Если кому понадобится - решил так:

public function _failed(WebGuy $I) {
        $I->executeJS("$(window).off('beforeunload')");
    }

Нужен jQuery на странице которая поломалась.