Транспортир на AngularJS - «время ожидания скрипта: результат не был получен через 11 секунд» после изменения страницы входа - PullRequest
5 голосов
/ 08 марта 2019

Protractor полностью зависает при попытке получить какое-либо свойство элемента после входа в систему (IDK, если это связано с входом в систему или связано только с переключением страниц).

it("Should get location of main container", async function() {
    await LoginPage.validLogin();
    // Works and logs in the dashboard
    await browser.sleep(3000);
    // Get the main container by class name
    const container = await element(by.css(".main-container"));
    // Logs properly the element functions (as expected)
    console.log(container);
    console.log(await container.getLocation()); // Hangs here
});

В этом случае я пытаюсьполучить расположение основного элемента контейнера на странице.Первый console.log запускается и отображается правильно, а второй полностью зависает, поэтому я получаю тайм-аут сценария.Увеличение времени ожидания совсем не помогает ...

В Интернете я обнаружил, что неправильное использование $ timeout в AngularJS вместо использования $ interval может привести к такому странному поведению, но я действительно не могу просмотреть все(очень большая!) кодовая база проекта, чтобы изменить все, надеясь, что это просто работает, не говоря о внешних библиотеках, использующих $ timeout.

У меня SELENIUM_PROMISE_MANAGER = false;в моей конфигурации Protractor, поэтому я отключил встроенный поток управления, чтобы вручную управлять обещаниями, используя async / await, но даже если я использую встроенный поток управления без использования async / await, я получаю то же самое поведение и ошибку.Я использую Жасмин в качестве основы тестирования.

Может быть, я что-то упустил?Любая помощь будет высоко ценится, спасибо!

Ответы [ 3 ]

0 голосов
/ 28 марта 2019

Я не думаю, что getLocation() существует в привязках Javascript для селена.Я все равно не смог найти его в исходном коде.Так что это обещание никогда не вернется, поэтому оно и висит.Но я могу достичь того же самого с getRect():

it("Should get location of main container", async function() {
    await LoginPage.validLogin();
    const container = await element(by.css(".main-container"));
    await browser.wait(protractor.ExpectedConditions.presenceOf(container), 5000, 'Element taking too long to appear in the DOM');
    await console.log(await container.getRect());
});
0 голосов
/ 11 апреля 2019

Это связано с тем, что угловой не является стабильным. Посмотрите на ссылку ниже. Я нашел свой ответ там. Когда страница, которую вы пытаетесь проверить, открыта, перейдите в инструменты разработки браузера и введите в консоли getAllAngularTestabilities(). Здесь есть несколько свойств, которые указывают, готов ли angular к тестированию. hasPendingMicrotasts должно быть ложным. hasPendingMacroTasks должно быть ложным. isStable должно быть правдой. Я поставил скриншот ниже. На моем скриншоте hasPendingMacrotasks верно и должно быть ложным. Поэтому страница, на которую я смотрел, не была готова к тестированию.

Сбой: время ожидания сценария: результат не был получен в течение 11 секунд. От: Задача: Protractor.waitForAngular () - Локатор: По (селектор css, # my-btn)

console. My page is not ready for testing

0 голосов
/ 14 марта 2019

Попробуйте что-то вроде этого:

it("Should get location of main container", async function() {
    await LoginPage.validLogin();
    const container = await element(by.css(".main-container"));
    await browser.wait(protractor.ExpectedConditions.presenceOf(container), 5000, 'Element taking too long to appear in the DOM');
    await console.log(await container.getLocation());
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...