java—如何利用appium中关注的元素无法选择应用程序中下拉列表的值

svmlkihl  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(282)

我面临一个问题,即下拉值的元素没有显示在uiautomatorviewer中。
而我已经检查了xmldom getPageSource 也没有价值的是被曝光的结果显示在手机应用的屏幕上
xml片段如下所示below:-

<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);

但我无法挖掘价值。这件事我大部分都试过了。like:-

ad.pressKeyCode(66); // Press Enter

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

因为dom上没有用于下拉值的定位器,所以我无法在上面的代码中传递元素。
由于有一个名为frame,我也尝试使用以下代码进行切换:-

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

uiautomatorviewer屏幕:-

请建议我在那种情况下该怎么办。如有任何解决方案/建议,将不胜感激。

zbwhf8kr

zbwhf8kr1#

下面的代码为我工作

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);

note:- you 需要调整x和y根据您的要求在上述代码和通过最近的定位器一样的文本框的下拉列表。

euoag5mw

euoag5mw2#

这是一个已知的问题。在过去的两年里,我一直在做android应用程序自动化测试。我已经多次遇到同样的问题。不幸的是,uiautomator没有检测到这类元素,所以我们不能对这类元素执行任何操作。
appium在内部向uiautomator发送命令,uiautomatar在设备上执行操作。如果uiautomator看到这些元素,uiautomator可以执行操作。
所以我建议您不要花太多时间在使用touchaction/java脚本/pagesource或xpath上,因为我已经尝试过这些解决方案,但都不起作用。
但是,如果元素每次都位于同一位置,则可以使用坐标单击元素(如果下拉列表中的元素不断更改,则不建议使用坐标)。

相关问题