【发布时间】:2018-02-12 16:29:25
【问题描述】:
我遇到了一个问题,下拉值的元素没有显示在 uiautomatorviewer 中。
虽然我通过屏幕的getPageSource 检查了 XML DOM,但移动应用屏幕上显示的结果也没有任何价值
XML sn-p 如下:-
<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 屏幕:-
请建议我在这种情况下应该怎么做。 任何解决方案/建议将不胜感激。
【问题讨论】:
-
这是一款混合应用吗?在这种情况下,switchingContext 可能会帮助您找到该元素。 appium.io/slate/en/master/?java#automating-hybrid-apps
-
nup 它是基于 java android 构建的 ..
-
从外观上看,您访问的上下文似乎并不完全是原生的。在这个屏幕上,您能否尝试获取 contextHandles 以检查 appium 列出的所有内容。它将更好地证明可用的上下文以及是否需要切换。
-
我试过下面的代码:-
-
ArrayList
contextName = new ArrayList(); //设置 contextName = ad.getContextHandles(); System.out.println(contextName); for (String contexts : contextName) { System.out.println(contexts); if (contextName.contains("NATIVE_APP")) { System.out.println("给我看:" + contextName);线程.sleep(1500); ad.context("NATIVE_APP"); ad.findElement(By.xpath("//*[@text='Bryson City, NC']")).click(); } if (contextName.contains("WEBVIEW")) { ad.context("WEBVIEW"); ad.findElement(By.xpath("//*[@text='Bryson City, NC']")).click(); }
标签: java selenium-webdriver appium appium-android