2017-09-04 16 views
0

我面临的问题是uiautomatorviewer中未显示下拉列表元素。如何挖掘聚焦于appium的元素。无法选择appium中的下拉列表的值

虽然我具有由屏幕的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屏幕: -

enter image description here

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

+0

这是一个混合的应用程序?在这种情况下,可能会使用switchingContext来帮助您找到元素。 http://appium.io/slate/en/master/?java#automating-hybrid-apps – nullpointer

+0

nup it is build on java android .. –

+0

您所访问的上下文看起来并不完全是本机的。在此屏幕上,您是否可以尝试获取contextHandles来检查appium列出的内容。它可以更好地证明可用的上下文,以及是否需要切换。 – nullpointer

回答

-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按在上面的代码中你的需求,并通过类似下拉的文本框中最近的定位。

希望它能帮助你:)

1

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

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

因此,我建议你不要花太多的时间在使用TouchAction/Java脚本/ pagesource或XPath,因为我已经尝试过软管解决方案,但没有一次成功。

然而,您可以使用坐标如果该元素存在于每一次(不建议如果在下拉菜单中的元素下不断变化)的相同位置上的元素点击。

+0

谢谢维诺。 。我已经使用坐标来完成它,但是寻找一种更加稳健的替代方案,因为您无法在协调器上进行中继。即使我无法验证下拉式存在,因此它在启动时使自动化更加危险弹出虚假失败 –

+0

如果Google发布新版本的UiAutomator,我们可以检查更新的版本。到目前为止,没有办法检测这些元素。 – Vinod