У меня есть тесты 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);
Я вижу более надежные результаты от второго подхода, однако это означает больше кода и потенциально более хрупкие тесты, если условие неявного ожидания не будет тщательно учтено.
Какой подход здесь лучше или есть альтернатива?