【问题标题】:How to call a click on the Google Maps Marker marker in UI Automator?如何在 UI Automator 中调用 Google Maps Marker 标记的点击?
【发布时间】:2018-03-03 22:09:59
【问题描述】:
在 UIAutomator Viewer 中可以看到标记除了索引没有任何唯一性。
我尝试通过以下方式模拟对特定标记的点击:
UiObject gMap = mDevice.findObject(new UiSelector().descriptionContains("Google Map"));
UiObject marker = mDevice.findObject(gMap.getSelector().index(1));
marker.clickAndWaitForNewWindow();
但是点击没有发生。如何模拟点击标记?
【问题讨论】:
标签:
google-maps-markers
google-maps-android-api-2
android-uiautomator
【解决方案1】:
不要使用gMap.getSelector()。您应该使用childSelector 在地图视图中搜索标记
UiObject marker = mDevice.findObject(UiSelector()
.descriptionContains("Google Map")
.childSelector(UiSelector().instance(1))
)
在点击之前尝试使用marker.waitForExists(5000)。通常它们不会立即出现在地图上
【解决方案2】:
使用CulebraTester 和示例地图应用程序(如图所示)
其中有 3 个标记:2 个红色有 title 和 sn-p 而蓝色没有,您可以看到生成的代码有何不同。
mDevice.findObject(By.desc("title_of_marker1. snippet_of_marker1.").clazz("android.view.View").text(Pattern.compile("")).pkg("com.example.diego.mymapapplication")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
mDevice.findObject(By.desc("title_of_marker2. snippet_of_marker2.").clazz("android.view.View").text(Pattern.compile("")).pkg("com.example.diego.mymapapplication")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
mDevice.findObject(By.desc("Google Map").clazz("android.view.View").text(Pattern.compile("")).pkg("com.example.diego.mymapapplication")).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
第三个选择器过于宽泛且模棱两可。
我猜如果你添加 title 和/或 sn-p 你点击它们就没有问题了。