0

我面临一个问题,即下拉值的元素未在 uiautomatorviewer 中显示。

虽然我通过getPageSource屏幕检查了 XML DOM,但移动应用屏幕上显示的结果也没有任何价值

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 屏幕:-

在此处输入图像描述

请建议我在这种情况下应该做什么。任何解决方案/建议将不胜感激。

4

2 回答 2

2

这是一个已知的问题。从过去的 2 年开始,我一直在做 Android 应用测试自动化。我多次遇到同样的问题。不幸的是,uiAutomator 没有检测到这些元素,所以我们不能对这些元素执行任何操作。

Appium 在内部向 uiAutomator 发送命令,然后 uiAutomatar 在设备上执行操作。如果 uiAutomator 看到这些元素,uiAutomator 可以执行操作。

所以我建议你不要花太多时间在使用 TouchAction/java script/pagesource 或 xPath 上,因为我已经尝试过软管解决方案,但它们都没有奏效。

但是,如果元素每次都出现在同一位置,您可以使用坐标单击元素(如果下拉列表中的元素不断变化,则不建议使用)。

于 2017-09-04T15:16:29.800 回答
-1

下面的代码对我有用

        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,并传递最近的定位器,如下拉列表的文本框。

于 2017-09-11T13:26:24.170 回答