Как нажать на элемент, который сфокусирован в appium. Невозможно выбрать значение раскрывающегося списка в appium

Я столкнулся с проблемой, когда элемент раскрывающегося списка не отображается в uiautomatorviewer.

Пока я проверял XML DOM на getPageSource экрана, также не было обнаружено никакого значения результатов, отображаемых на экране мобильного приложения.

Фрагмент XML выглядит следующим образом:

<android.widget.FrameLayout index="0" text="" class="android.widget.FrameLayout" package="com.demo.pass" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,145][540,196]" resource-id="com.demo.pass:id/frameSearchLocation" instance="6">
    <android.widget.EditText index="0" text="Bryson City" class="android.widget.EditText" package="com.demo.pass" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="true" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[30,145][510,196]" resource-id="com.demo.pass:id/autoCompleteSearchTextView" instance="0" />
    <android.widget.ImageView NAF="true" index="1" text="" class="android.widget.ImageView" package="com.demo.pass" content-desc="" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[457,148][502,193]" resource-id="com.demo.pass:id/imgCurrentLocation" instance="0" />
</android.widget.FrameLayout>

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

ad.pressKeyCode(20);

Но я не могу нажать на значение. Я пробовал большую часть вещей. Нравиться:-

ad.pressKeyCode(66); // Press Enter 

И

TouchAction action = new TouchAction(ad);
action.perform();

Поскольку в DOM нет локатора для выпадающих значений, я не могу передать элемент в приведенном выше коде.

Поскольку в качестве фрейма есть имя, я также пытался переключиться, используя приведенный ниже код: -

ad.switchTo().frame(ad.findElement(By.xpath("com.demo.pass:id/frameSearchLocation")));

экран uiautomatorviewer: -

введите здесь описание изображения

Подскажите, что мне делать в таком случае. Любое решение/предложения будут оценены.


person Shubham Jain    schedule 04.09.2017    source источник
comment
Это гибридное приложение? Вероятно, в этом случае SwitchContext поможет вам найти элемент. appium.io/slate/en/master/?java#automating- гибридные приложения   -  person Naman    schedule 04.09.2017
comment
nup построен на java android..   -  person Shubham Jain    schedule 04.09.2017
comment
контекст, к которому вы обращаетесь, не кажется полностью естественным из-за его внешнего вида. На этом экране не могли бы вы попробовать получить contextHandles, чтобы проверить, что все перечислено appium. Это обеспечило бы лучшее доказательство доступных контекстов и того, может ли потребоваться переключение или нет.   -  person Naman    schedule 04.09.2017
comment
Я пробовал ниже код: -   -  person Shubham Jain    schedule 04.09.2017
comment
ArrayList‹String› contextName = new ArrayList‹›(); // Установить contextName = ad.getContextHandles(); System.out.println(имя_контекста); for (String contexts: contextName) { System.out.println(contexts); if (contextName.contains(NATIVE_APP)) { System.out.println(Show me: + contextName); Thread.sleep(1500); объявление.контекст(NATIVE_APP); ad.findElement(By.xpath(//*[@text='Брайсон-Сити, Северная Каролина'])).click(); } если (contextName.contains(WEBVIEW)) { ad.context(WEBVIEW); ad.findElement(By.xpath(//*[@text='Брайсон-Сити, Северная Каролина'])).click(); }   -  person Shubham Jain    schedule 04.09.2017
comment
становится пустым [] .. источник: - discuss.appium.io/t/   -  person Shubham Jain    schedule 04.09.2017


Ответы (2)


Это известная проблема. Я занимаюсь автоматизацией тестирования приложений для Android последние 2 года. Я много раз сталкивался с одной и той же проблемой. К сожалению, uiAutomator не обнаруживает такие элементы, поэтому мы не можем выполнять какие-либо действия с такими элементами.

Appium внутренне отправляет команду uiAutomator, а uiAutomatar выполняет действия на устройстве. uiAutomator может выполнять действия, если uiAutomator видит эти элементы.

Поэтому я предлагаю вам не тратить много времени на использование TouchAction/java script/pagesource или xPath, потому что я уже пробовал шланговые решения, но ни одно из них не сработало.

Однако вы можете нажимать на элементы, используя координаты, если элемент присутствует в одном и том же месте каждый раз (не рекомендуется, если элементы в раскрывающемся списке постоянно меняются).

person Vinod    schedule 04.09.2017
comment
Спасибо, Винод. Я уже сделал это, используя координаты, но ищу альтернативу, которая будет более надежной, поскольку вы не можете использовать координаторов. Даже я не могу проверить наличие раскрывающегося списка, поэтому автоматизация становится более опасной. когда он начинает всплывать ложный сбой - person Shubham Jain; 04.09.2017
comment
Если Google выпустит новую версию UiAutomator, мы сможем проверить более новую версию. На данный момент нет никакого способа обнаружить эти элементы. - person Vinod; 04.09.2017

Ниже код работает для меня

        By filter =By.xpath("MYLOCATOR");
        System.out.println("About to click on result");
        Point point = ad.findElement(filter).getLocation();
        int elementCenterX = point.getX() + 80;
        int elementCenterY = point.getY() + 100;
        System.out.println("value of x = "+elementCenterX+"   value of y = "+elementCenterY);
        ad.tap(2, elementCenterX , elementCenterY , 0);

Примечание. Вам необходимо настроить X и Y в соответствии с вашими требованиями в приведенном выше коде и передать ближайший локатор, например текстовое поле раскрывающегося списка.

person Shubham Jain    schedule 11.09.2017