Вы, вероятно, должны учитывать асинхронный код и ждать разрешения обещаний. Кроме того, добавьте параметр done
Жасмина к функции теста, чтобы сообщить селену о завершении теста.
Еще одна причина, которая может вызвать это, - активировать waitForAngularEnabled
до того, как вы попадете на угловую страницу. Я предлагаю вам префикс этого вызова с вызовом, чтобы проверить, что что-то на странице уже загружено , чтобы вы знали, что angular готов к транспортировке транспортиром перед ожиданием угловых действий.
Важно отметить, что транспортир ожидает следующего действия после waitForAngularEnabled(true)
, чтобы инициировать проверку, полагаясь на это, что может сделать проблему неясной, если через некоторое время кто-то изменит код.
describe("Test Name", function() {
it("Test case", function(done) {
// first execute steps on a non-Angular component
browser.waitForAngularEnabled(false)
.then(() => /* step1 */)
.then(() => /* step2 */)
// ...
// ? this one is very important to make sure
// we're in an angular page ?
.then(() => ensurePageTitleIsVisible())
.then(() => browser.waitForAngularEnabled(true))
.then(() => done())
.catch((err) => done.fail(err));
});
});
function ensurePageTitleIsVisible() {
return browser.wait(ExpectedConditions.visibilityOf(PAGE_TITLE_SELECTOR), jasmine.DEFAULT_TIMEOUT_INTERVAL, 'Title does not exist after timeout');
}
Это может также дать вам лучшее сообщение об ошибке.
и, конечно, вы можете сделать то же самое с синтаксисом async \ await.
describe("Test Name", function() {
it("Test case", function(done) {
try {
// first execute steps on a non-Angular component
await browser.waitForAngularEnabled(false)
await step1();
await step2();
// ...
await browser.waitForAngularEnabled(true);
done();
} catch(err) {
done.fail(err);
}
});
});
По сути, ваша проблема возникает из-за того, что вы продолжаете выполнять шаги теста до фактического завершения функции browser.waitForAngularEnabled
.