t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

Теги: #<Tag:0x00007f9afe83a8b0> #<Tag:0x00007f9afe83a798> #<Tag:0x00007f9afe83a6d0>

Добрый день,

После многочисленных строк костыля в тесте под названием 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:

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

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

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

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

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

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

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

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