Как заставить автоматизированные тестовые сценарии в транспортире ждать, пока страница не загрузится полностью - PullRequest
5 голосов
/ 07 февраля 2020

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

Проблема

Я тестирую приложение angular с транспортиром . Внутри приложения я хочу убедиться, что при нажатии на ссылку меня перенаправляют на нужную страницу (не angular). Проблема в том, что до тех пор, пока я не доберусь до страницы, которую я проверяю, URL-адрес меняется примерно 3 раза (происходит многократное перенаправление), поэтому я не могу заставить функцию ожидания ждать, пока страница полностью загрузится

Что я пытался / что не будет работать для меня

  1. Я против browser.sleep() в течение более 1000 мс!
  2. browser.waitForAngular(), поскольку это не angular page
  3. ExpectedConditions.urlIs() URL-адрес - это переменная, которую я утверждаю
  4. ExpectedConditions.presenseOf() страница может изменяться, поэтому я не могу полагаться на элементы внутри
  5. browser.executeScript("return window.document.readyState") немедленно возвращает compete, хотя страница все еще загружается (я был уверен, что это то, что мне нужно, но это тоже не сработало)
  6. Я даже пытался добавить функции, ожидающие innerHtml вся страница не изменяется, по крайней мере, 3 се c, но происходит сбой, потому что иногда между переадресациями возникает пауза более 3 сек c. Все, что выше 3 se c не является разумным тайм-аутом

Вопрос

Я заметил, что когда браузер загружает страницу, кнопка Reload this page меняет свое состояние на Stop loading this page (значок X), пока я не буду перенаправлен на последнюю страницу (скриншоты ниже). Таким образом, вопрос в есть ли способ заставить транспортир указывать на то же условие, которое chrome использует для выбора отображаемого значка?

enter image description here

против

enter image description here

И если не совсем то же самое, но как заставить транспортир зависать, пока страница не будет полностью загружен

Важно учитывать

Очевидно, есть много грязных решений, которые я могу сделать, как явное ожидание. Но я возвращаюсь к этому вопросу время от времени, поэтому меня не интересуют эти грязные решения, которые работают 70% времени для конкретной c причины

PS Я подумал, что Кнопка меняет значок на document.load() событие . Но я не могу понять, что я должен написать в консоли, чтобы этот скрипт записывал сообщение при обновлении sh они страницы

Ответы [ 3 ]

1 голос
/ 11 марта 2020

Вы пробовали

await browser.wait(async () =>
        await browser.driver.executeScript('return document.readyState;') === 'loading', 2000)
        .then(() => true, () => true);
await browser.wait(async () =>
        await browser.driver.executeScript('return document.readyState;') === 'complete', 5000)
0 голосов
/ 10 марта 2020

Вы пробовали ...

browser.executeScript("return window.jQuery.active").equals(0)
0 голосов
/ 11 февраля 2020

У меня есть следующий фрагмент только для проблемы, я жду, пока отобразится элемент:

ElementFinder.prototype.secureIsDisplayed = function () {
return browser
.wait(EC.visibilityOf(this), actionTimeout)
.then(() => this.isDisplayed())
.catch(err => {
    throw new Error(`Expected ElementFinder ${this.locator()} to be displayed. ${err.toString()}`);
});
};

, где actionTimeout - это const int, а EC = protractor.ExpectedConditions вам нужно будет импортировать файл и назовите это так:

import './asd.ts'
element(by.css('.myClass')). secureIsDisplayed()

I, если вы можете найти последний загружаемый элемент или просто получить элемент перенаправления, он может творить чудеса. Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...