有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何利用appium中关注的元素。无法在appium中选择下拉列表的值

我面临的问题是,uiautomatorviewer中没有显示下拉值元素

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

XML片段如下所示:-

<安卓.widget.FrameLayout index="0" text="" class="安卓.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">
    <安卓.widget.EditText index="0" text="Bryson City" class="安卓.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" />
    <安卓.widget.ImageView NAF="true" index="1" text="" class="安卓.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" />
</安卓.widget.FrameLayout>

转念一想,我试着用键盘操作。我可以使用下面的代码导航到该值

ad.pressKeyCode(20);

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

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

enter image description here

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


共 (2) 个答案

  1. # 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,并通过下拉列表中最近的类似定位器的文本框

  2. # 2 楼答案

    这是一个众所周知的问题。在过去的两年里,我一直在做Android应用程序自动化测试。我曾多次遇到过同样的问题。不幸的是,uiAutomator没有检测到这类元素,因此我们无法对这些元素执行任何操作

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

    因此,我建议您不要在使用TouchAction/java脚本/pagesource或xPath上花费太多时间,因为我已经尝试过这些解决方案,但它们都不起作用

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