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

ProtractorJS_не корректно работает implicitlyWait?

protractor
protractorjs
testing
Теги: #<Tag:0x00007f7b631811f0> #<Tag:0x00007f7b631810b0> #<Tag:0x00007f7b63180f20>

(Алексей Щербин) #1

Добрый день,

После многочисленных строк костыля в тесте под названием browser.sleep() (продукт не на Angular), я решил пойти более умным путем и прописать в файле conf.js следующее:

onPrepare: function(){
    browser.manage().timeouts().implicitlyWait(10000);
	}

10 секунд поставлены по той причине, что это максимальное время ожидания элементов на тестируемом сайте (эмпирическим путем). Так вот. Тест падает по причине невозможности найти элемент, но не сразу (!):

//осуществляется открытие еще одного ресурса
browser.executeScript('window.open(\'https://2')').then(function() {
            browser.getAllWindowHandles().then(function(handles) {
                browser.switchTo().window(handles[1]);
            });
        });

        //страница логина пейджа
        browser.ignoreSynchronization = true;
        B_login_page.enterFieldUsername().sendKeys(loginB);
        B_login_page.enterfieldPassword().sendKeys(passwordB);
        B_login_page.buttonLogIn().click();

        //главная страница авторизованного пользователя
        B_main_page.sectionIndividuals().click();
	element(by.cssContainingText('.grid-cols-2', emailClient))**//вот тут падает тест, не находит этого элемента**.click().then(function() {
			browser.ignoreSynchronization = true;
			element(by.css('[data-item-marker="Open"]')).click();
                });

Помогите, пожалуйста, зеленому новичку :slight_smile:


(Oleksii Ihnatiuk) #2

Работайте с Explicit Waits


(Алексей Щербин) #3

Так это ж его надо прописывать с каждым элементом, над которым выполняю ту или иную операцию. По этой же причине хотел использовать ImplicitlyWait. Но я не пойму почему оно так криво работает?


(Oleksandr Khotemskyi) #4

Дайте угадаю, а падает где-то приблизительно через 10 секунд? :wink:

Неявные и явные ожидания - это очень хитрая тема в вебдрайвере. Это не проблема JS или другого языка, а проблема вебдрайвера в целом. Я уже отвечал на похожий вопрос, рекомендую ознакомится

А еще проверьте что элемент действительно есть. Возможно ошибка что элемента нет - правдивая.


(Алексей Щербин) #5

Да, Вы правы. Finished in 10.72 seconds. Но я при этом ставил в conf: browser.manage().timeouts().implicitlyWait(100000);

Элемент по заданному набору селекторов действительно есть, так как тест проходит успешно при прописывании перед каждым шагом browser.sleep(10000).

С приведенной ссылкой ознакомлюсь, благодарю!
Дополнено: Получается что элементы сперва прогружаются в DOM’е, а потом прогружаются их css свойства. А implicitlyWait ждет только когда они появятся в DOM’е. Получается по этому оно и ругается? Как по аналогии в разнице между presenceOf (ждет пока появится в DOM’е) и visibilityOf (станет видим со всеми стилями)?