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

Не удается нажать на подтверждение в alert()

codeception
webdriver
Теги: #<Tag:0x00007f7b6431bb90> #<Tag:0x00007f7b6431ba28>

(s.alex) #1

Добрый день коллеги! Сталкнулся с повседневной проблемой это алерт окна
Вот в чем моя проблема, в том что когда я клинкаю на “delete address” у меня появляется алерт окно (будь это хром или файерфокс) в котром есть подтверждение удаления или отмена. Так вот что я написал:

$I->click('ol > li:nth-of-type(1) > p > a.link-remove');
$I->wait(3);
$I->acceptPopup();
$I->see('The address has been deleted.', 'li.success-msg' );

Что получается: когда происходит клик на удаление, даже не срабатывает

$I->wait(3);

как тест падает с такой ошибкой:

   unexpected alert open
  (Session info: chrome=46.0.2490.71)
 (Driver info: chromedriver=2.19.346078 (6f1f0cde889532d48ce8242342d0b84f94b114a1),platform=Windows NT 5.2     SP2 x86) (WARNING: The server did not provide any stacktrace information)
  Command duration or timeout: 0 milliseconds: null
  Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
  System info: host: '185-44-129-64', ip: '185.44.129.64', os.name: 'windows', os.arch: 'x86', os.version: '5.2', java.version: '1.8.0_40'
  Driver info: org.openqa.selenium.chrome.ChromeDriver
  Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\Windows\proxy\scoped_dir3344_6323}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=46.0.24
  90.71, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
  Session ID: b1b7786d06269c12c6c0ee7e8f690bc7

Помогите разобраться потому как в мое магазине много алерт окон


(Stan) #2

Вроде как в Codeception есть тест на это - https://github.com/Codeception/Codeception/blob/d6b3a25083c4541d03836c423555e9a15806a79b/tests/unit/Codeception/Module/WebDriverTest.php#L86

С другой стороны, как создается алерт? confirm/alert ? Может быть какая-то своя реализация модального окна одного из миллиона фреймворков? Можете посмотреть в коде?


(Ray Romanov) #3

Алерт создается стандартный JS - alert();


(Stan) #4

https://github.com/Codeception/Codeception/issues/1485 ?
Запускаете с codecoverage?


(Ray Romanov) #5

Нет, приемочные тесты, какой кодековередж.


(Stan) #6

Выложите codeception.yml && acceptance.suite.yml ?


(s.alex) #7

Проблема решилась, прописал в свой файл и все заработало спс) за внимание

public function testAcceptPopup() {
$this->module->amOnPage('/form/popup');
$this->module->click('Confirm');
$this->module->acceptPopup();
$this->module->see('Yes', '#result');
}

(Dmitry Minkin) #8

каким образом решилась проблема? что-то не очень понял. Прописал в свой файл тестовую функцию? ))


(s.alex) #9
    $I->click('//*[@class="actions"]/a');
    $I->acceptPopup();
    $I->moveBack();
    $I->see('The comparison list was cleared.', 'li.success-msg');

А основная проблема заключалось в том, что если в codeception.yml прописан

extensions:
enabled:

  • Codeception\Extension\RunFailed
  • Codeception\Extension\Recorder
    config:
    Codeception\Extension\Recorder:
    delete_successful: true

То в моем случае не срабатывала ф-ция acceptPopup(); а когда отключил начали срабатывать алерт проверки


(Евгений Зацепин) #10

Проблема в Recorder - он пытается снять скриншот после всплытия алерта, и падает с ошибкой. При отключенном Recorder такой проблемы нет.


(s.alex) #11

Кстати [quote=“Evgenij_Zaczepin, post:10, topic:8467, full:true”]
Проблема в Recorder - он пытается снять скриншот после всплытия алерта, и падает с ошибкой. При отключенном Recorder такой проблемы нет.
[/quote]

Решения так и не появилось?


(Ray Romanov) #12

Вряд ли появится, т.к. появление алерта полностью блокирует работу браузера с вытекающими…


(Artur Korobeynyk) #13

Решение - использовать WinApi из javascript, используюя ActiveX. Получить хэндл окна браузера. Получить хэндлы дочерних окон. Узнать какое дочернее окно является овнером окна браузера. Закрыть это окно.
Вот только я на JS не пишу )


(Ray Romanov) #14

Не, это предложение не из этой оперы, это был вопрос больше к разработчикам Codeception…


(Евгений Голов) #15

Попробуйте в acceptance.suite.yml дописать

modules:
       enabled:
          - WebDriver:
                 url: .....
                 ..........
                 capabilities:
                        unexpectedAlertBehaviour: 'ignore'

Это описано тут - https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities


(Ray Romanov) #16

Не это не из той оперы, а если следующий шаг подтвердить или отказать алерту, тогда усе шеф фейл!!!
И да, это работает вроде только с ФФ.