Неявное ожидание в тестах E2E для приложения Angular - PullRequest
0 голосов
/ 21 мая 2018

У меня есть тесты E2E (с использованием Selenium WebDriver) для приложения Angular 4 / ASP.NET Core Web API.

У меня иногда возникают проблемы с таймаутом / ожиданием в некоторых тестах.

В инфраструктуре E2E есть метод WaitForAngular (), который использует некоторый Javascript (взятый из Protractor), который ждет, пока Angular покажет, что он загрузил все «тесты», прежде чем продолжить (см. https://stackoverflow.com/a/39349865/95423)

Однако это не так)Это кажется абсолютно надежным, и время от времени мы получаем неопределенное время ожидания.

Другой подход, который мы используем, - это неявное ожидание визуализации рассматриваемого элемента:

var url = "targetURL"
Driver.Instance.Navigate().GoToUrl(url);

var waitSeconds = 15;
var navWait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(waitSeconds))
{
    Message = $"The targetURL failed to load in {waitSeconds} seconds"
};

navWait.Until(x => x.FindElementById(targetUrlId) != null || x.FindElementById(forbiddenId) != null);

IЯ вижу более надежные результаты второго подхода, однако это означает больше кода и, возможно, более хрупкие тесты, если условие неявного ожидания не будет тщательно продумано.

Какой подход лучше или естьальтернатива?

1 Ответ

0 голосов
/ 21 мая 2018

Какую версию Angular вы используете?

Если вам просто нужно дождаться отображения элемента, вы можете попробовать:

import { browser } from 'protractor';
const waitLimit = 15000;
browser.wait(() => {
  return myHtmlElement.isDisplayed();
}, waitLimit);
...