Локаторы транспортира не работают в структуре PageObjectModel - PullRequest
1 голос
/ 15 января 2020

Framework: Appium + Protractor + Cucumber + Typescript с использованием модели POM

  • У меня есть структура транспортира для appium, разработанная в структуре POM
    • На начальной странице приложения будет указан локаторы, вызывающие другой ts-файл, и функции, такие как tap, isDisplayed, вызывающие его в другом ts-файле.
    • Но как только он проходит начальные страницы в приложении, скажем, 3 страницы. не идентифицированы локаторы, которые вызывают другую функцию, но они идентифицируются, когда они передаются напрямую (например, driver.findelements (by. css ('')). click) это работает.
    • Проблема Я не могу передать этот код, как этот, в файле .ts определения шага всегда, так как это не очень хорошая структура

Примечание: Кстати, этот скрипт работал хорошо раньше. попытался протестировать, используя другой обходной путь, например, снова собрать двоичный файл, попытаться запустить приложение android и ios, понизив или обновив пакеты узлов. Но ничто не решило проблему. кто-нибудь сталкивался с такой проблемой. Любые предложения или решения для этой проблемы, пожалуйста?

Код, который работает: (Передача локаторов непосредственно в функцию, а не из файла onboarding.ts будет работать)

Then(/^VIC should be selected from the state or territory drop down$/, async () => {
await browser.driver.findElement(by.css('button[sp-automation-id=\'select-state-toggle\']')).click();
await browser.driver.findElement(by.css('page-action-sheet label[sp-automation-id=\'action-sheet-option-VIC\']')).click(); });

Код, который не работает: (файл Onboarding.ts содержит локаторы, определенные для State и VI C, такие же, как в приведенном выше блоке кода. Но чтение с него не работает.)

Then(/^VIC should be selected from the state or territory drop down$/, async () => {
await AutomationAction.tap(Onboarding.State);
await AutomationAction.tap(Onboarding.VIC); });

Код, который работает (приведенный ниже код вызывается перед блоком кода выше, это страница перед вызовом вышеуказанных страниц)

Then(/^I enter the mobile number and tap next button on the your mobile number screen$/, async () => {
 MobileNo = AutomationAction.getMobileNumber("mobileNumber");
 SameMobileNo = MobileNo;
 await AutomationAction.sendKeyText(Onboarding.InputMobileNo,MobileNo);
 await AutomationAction.tap(Onboarding.Next_BTN_YourMobileNumber);

}) ;

1 Ответ

0 голосов
/ 16 января 2020

Из-за страницы, на которой происходит сбой, автоматизация считает ее страницей, отличной от angular, и локаторы, используемые для сбоя или не находят их при вызове в другой функции. Когда я представил browser.ignoreSycnhronization = true, чтобы сделать Angular syn c для не angular приложений / страниц, это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...