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

Selenium + WebDriver + protractor using Java

protractor
angularjs
selenium
webdriver
java
Теги: #<Tag:0x00007f7b649625f8> #<Tag:0x00007f7b649623f0> #<Tag:0x00007f7b64962210> #<Tag:0x00007f7b64962008> #<Tag:0x00007f7b64961cc0>

(Stanislav Kharchenko) #1

Привет, коллеги.
Начал автоматизацию веб-приложения использующего Angular.
Для автоматизации выбрал Selenium+WebDriver и джава обёртку Protractor для тестирования ангуляра.

После инициализации каждого пейджа я выполняю проверку на отработку всех запросов на ангуляр странице с помощью метода ngDriver.waitForAngular() который описан в самом протракторе.

В итоге после определенного действия (например после клика по кнопке или ссылке) веб-приложение в самом браузере вылетает с таким еррором:

Error: Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.4.0/$rootScope/infdig?p0=10&p1=[]
http://wl-ins:27400/main-99aec0a75125b8ad788a2803794e715a-cached.js:2140
window.onerror@http://wl-ins:27400/main-99aec0a75125b8ad788a2803794e715a-cached.js:1277:52

Если же waitForAngular() не вызывать, тогда имею другую проблему с кликом по элементу - метод который вызывается по клику не успевает подгружаться, и клик как бы не происходит (визуально виден лишь фокус на вебэлементе).

Похоже что waitForAngular() посылает запросы веб-приложению и оно крешится.

Исходники protractor для джавы на гитхабе:

В какую сторону следует копать в данном случае?

Спасибо.


(Goshko Nazar) #2

Напишите создателю репозитория о ошибке, так как это явная модификация протрактора под джаву (сам протрактор то js-сный).
Вобще, конечно, плохая практика браться за сырые инструменты, и чесно говоря, походив по коду, я не увидел что такого умеет протрактор, в отличии от простого вебрайвера, а какие то кастомные вейты, можно ведь и самому написать)


(Stanislav Kharchenko) #3

Для приложений на ангуляре нужны вейты полного завершения всех http запросов, что собственно и умеет делать протрактор. Как сделать такой вейт для ангуляр приложений я честно говоря не знаю, скорее больше времени придется потратить на изучение специфики самого ангуляра.
Собственно изначально я взялся за простой вебдрайвер и со старта напоролся на проблему с ожиданиями.

Скажем так, на контрол при клике подвешено событие, типа span ng-click=“open()”. Мы можем дождаться появления контрола с помощью WebDriverWait, и даже проверить его на кликабельность, но сам скрипт который отвечает за событие open() еще не успел подгрузиться. В итоге клик по элементу как бы есть, а вот ожидаемого события нет.

Есть ли какие-либо более общие способы проверки ожидания загрузки всех джава скриптов на страничке?


(Irinka Fesenko) #4


может поможет


(Goshko Nazar) #5

Возьмите именно вейт из протрактора, а остальное используйте нативное - там ведь просто переопределенные методы все остальное (судя по репозиторию)