Как использовать Android UiSelector с приложением, привязанным к дочерним элементам родительского элемента

#android #appium #ui-automation

#Android #appium #пользовательский интерфейс-автоматизация

Вопрос:

Я хотел бы нажать на первый android.widget.Отредактируйте текстовый элемент из источника страницы ниже. Источник не содержит никакого полезного идентификатора ресурса

Я уже сделал запрос xpath //*[./*[@text='Österreich']]/*[@class='android.widget.EditText'][1] , проблема в том, что я не могу использовать запрос xpath в этом месте, я могу использовать только UiSelector, и у меня не так много опыта работы со сложными селекторами через UiSelector.

                         <android.view.View index="6" package="com.android.chrome" class="android.view.View" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,711][465,800]" displayed="true">
                          <android.view.View index="0" package="com.android.chrome" class="android.view.View" text="  " checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,711][465,800]" displayed="true" />
                          <android.view.View index="1" package="com.android.chrome" class="android.view.View" text="Rechnungsadresse" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,711][465,744]" displayed="true" />
                          <android.view.View index="2" package="com.android.chrome" class="android.view.View" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,759][465,800]" displayed="true">
                            <android.widget.Spinner index="0" package="com.android.chrome" class="android.widget.Spinner" text="Österreich" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,759][465,800]" displayed="true" />
                            <android.widget.EditText index="1" package="com.android.chrome" class="android.widget.EditText" text="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,799][465,800]" displayed="true" />
                            <android.widget.EditText index="2" package="com.android.chrome" class="android.widget.EditText" text="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,799][465,800]" displayed="true" />
                            <android.widget.EditText index="3" package="com.android.chrome" class="android.widget.EditText" text="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,799][465,800]" displayed="true" />
                            <android.widget.EditText index="4" package="com.android.chrome" class="android.widget.EditText" text="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,799][465,800]" displayed="true" />
                            <android.widget.EditText index="5" package="com.android.chrome" class="android.widget.EditText" text="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[15,799][465,800]" displayed="true" />
 

Я пробовал следовать, но это не работает

 new UiScrollable(new UiSelector().scrollable(true))
    .scrollIntoView(new UiSelector().text("Österreich")
    .fromParent(new UiSelector()
        .childSelector(new UiSelector().className("android.widget.EditText").instance(0))
    )
)
 

в качестве кода на Java я использую getDriverWait().findElement(MobileBy.AndroidUIAutomator(uiSelectQuery)).click()

У вас есть какие-либо идеи, как это сделать? Или ссылка для хороших примеров, как использовать UiSelector?

Android, привязанный UiSelector, UIAutomator, Appium, UiScrollable

Ответ №1:

Я действительно смотрел на этот вопрос, надеясь на ответ. При тестировании больше на моей стороне, я считаю, что для вас должно сработать следующее

 new UiSelector().className(android.widget.Spinner).childSelector(new UiSelector().className(android.widget.EditText).index(0))
 

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