Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Protractor выбор елемента в drop down list (ul, li)

protractor
protractorjs
javascript
Теги: #<Tag:0x00007fedb815ace0> #<Tag:0x00007fedb815ab28> #<Tag:0x00007fedb815a9c0>

(Olexander Davis) #1

Долго не хотел писать лишний раз сюда, но после почти 1 дня проб, далее не могу столько времени терять, все таки напишу.
Не смог понять в чем ошибка/проблема, казалось бы элементарная до безумия ситуация, но прошу вашей помощи ASAP

Вот скриншот части страницы, где поле Full address, куда я ввел слово Chicago и появляеться suggestive search c варинтами (простоя казалось бы вещь)

Ну а далее, просто не могу дождаться элемент и кликнуть любой ul > li

it('first Sign Up', async function () {
        await email.sendKeys(chance.email());
        await passField.sendKeys('');
        await passConfField.sendKeys('');
        //await prefix.click();
        //await browser.sleep(1000);
        //await mr.click();
        await firstName.sendKeys('Protractor');
        await lastName.sendKeys('AutoTest');
        await company.sendKeys('QA');
        await fullAddress.sendKeys('Chicago');
        await browser.sleep(1000);
        const dropDown = $('.menu')); // даже не видит сам drop down list
        const waitDropDown = EC.visibilityOf(dropDown);
        await browser.wait(waitDropDown, 1000);
        const suggestiveSearch = $('ul.menu > li:first-child'); // li:first-of-type по разному уже локаторы пробывали, я уже думал, что я не правильно локатор выстроил, но несколько человек выставляли по разному как только возможно, все равно, потому думаю, что делаю что не так в целом
        await suggestiveSearch.click();
        await address1.sendKeys('Chicago Address 1 90000');
        await address2.sendKeys('This is second test address, Chicago');
        await zip.sendKeys('12345');
        await phone.sendKeys('1234567890');
        await browser.wait(isClickable, 2000);
        await buttonSignUp.click();
    });

(Dmitri Komarist) #2

А Ваши функции sendKeys() в обьектах email, passField… возвращают промисы? Если нет то посути оператор await не работает и весь код выполняется ассинхронно, соответственно элементы не успевают появлятся в DOM модели.


(Olexander Davis) #3

Спасибо за отзыв.
Возвращает. Как эксперемент я уже обавил слипы, что бы посмотреть, но все равно

  • Failed: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds. This may be because the current page is not an Angular application. Please see the FAQ for more details: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular
    While waiting for element with locator - Locator: By(css selector, [e2e=“dropdown”])
    While waiting for element with locator - Locator: By(css selector, [e2e=“dropdown”])

Я уже наш фронт енд весь пересмыкал, но так и не смогли даже просто локализовать этот дропдавн

Серьезно уже не знаю что и делать…


(Dmitri Komarist) #4

Как предположение, может дело во второй скобке в этой строке:
const dropDown = $(’.menu’));
По сути это не правильный синтаксис для JS
Должно быть так - const dropDown = $(’.menu’);


(Olexander Davis) #5

не, там ее нету, эт я здесь ошибку сделал, там это только один с локаторов, что я и парни с фронта ставили…
В чем проблема: никто не может определить


(Oleksandr Khotemskyi) #6

Это когда начинаешь печатать? Потенциально может быть что Ангуляр постоянно крутит что-то в фоне когда появляется этот список подсказок, и не возвращает протрактору сообщение что приложение готово к взаимодействию. Потому прострактор ждет ждет что приложение готово - а оно нет, и падает по таймауту -

Вот про этот таймаут (Waiting for Angular) -
http://www.protractortest.org/#/timeouts#timeouts-from-protractor

AngularJS
If your AngularJS application continuously polls $timeout or $http, Protractor will wait indefinitely and time out. You should use the $interval for anything that polls continuously (introduced in Angular 1.2rc3).

(Olexander Davis) #7

Спасибо @xotabu4 за помощь

Проблема решена с помощью использования

await browser.waitForAngularEnabled(false);

closed


(Павел) #8

Хм… смотри если твое приложение на Ангуляре, то отключать этот wait не стоит )


(Oleksandr Khotemskyi) #9

Конечно. Отключение синхронизации стоит воспринимать только как хотфикс. Стоит включить как можно скорей чтобы не перегружать код своими ожиданиями