Appium не может найти элемент вне экрана с помощью UiSelector - PullRequest
0 голосов
/ 20 декабря 2018

Я начинаю автоматизировать набор тестов для мобильного приложения, написанного на NativeScript (раньше это было гибридное приложение Cordova), и найти некоторые элементы становится все труднее.

Я пытаюсь найти виджет TextView, который находится за пределами видимого пространства экрана (область просмотра AKA), с помощью UiSelector:

@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"CFT\")")
private MobileElement labelCFT;

Когда я пытаюсь взаимодействовать с таким элементом, результатследующее сообщение:

org.openqa.selenium.NoSuchElementException: Can't locate an element 
by this strategy: By.chained({By.AndroidUIAutomator: 
new UiSelector().textContains("CFT")})

Логический вывод состоит в том, что элемент не существует или моя стратегия локатора неверна.Но вот в чем дело, когда я изменяю текст для поиска элемента, который находится внутри видимого пространства / области просмотра , локатор работает безупречно.Пример:

@AndroidFindBy(uiAutomator = "new UiSelector().textContains(\"loans\")")
private MobileElement labelCFT;

А потом:

public void whatText() {
    System.out.println("Text of the label: " + labelCFT.getText());
}

Я получаю правильный «Текст метки: это ваши кредиты».

Видимо, это ограничениеUiSelector или, по крайней мере, как Appium работает с ним.

Единственный вариант, который я представляю, - это прокрутить весь экран и затем вызвать @AndroidFindBy, а затем повторять, пока не останется прокрутки.

Предполагается ли так, что работают UiSelector и textContains ()?Это другое решение для этого?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

В приложении для Android вы можете щелкать или выполнять какие-либо действия с элементами, которые видны на экране, если вы хотите выполнить какие-либо действия с элементами, которые не видны, вы можете использовать метод сенсорного действия, для которого необходимо указать x и y.я думаю, это может помочь вам в моем случае это работает

TouchAction ta = new TouchAction(driver);
            ta.press(PointOption.point(207, 582)).moveTo(PointOption.point(8, -360)).release().perform();
0 голосов
/ 20 декабря 2018

Я столкнулся с подобным типом проблем в автоматизации.Единственный способ, который я нашел, - это прокручивать вверх или вниз, пока элемент не будет виден на экране, а затем обращаться к элементу по «имени».вы можете использовать следующую команду для прокрутки.

driver.findElementByAndroidUIAutomator ("new UiScrollable (new UiSelector ()). scrollIntoView (text (\" Your Element \ "));");

После того, как нужный элемент отображается на экране, вы можете легко получить к нему доступ.

Спасибо

...