使用 UIAutomator 单击 MarkerOptions
Clicking an MarkerOptions using UIAutomator
我正在尝试让 UIAutomator 单击 Google 地图上的 MarkerOptions。 ..
build.gradle(应用级别)
dependencies {
androidTestCompile 'com.android.support.test:runner:0.3'
androidTestCompile 'com.android.support.test:rules:0.3'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}
测试类
@RunWith(AndroidJUnit4.class)
public class ApplicationTest {
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
UiObject marker = device.findObject(new UiSelector().descriptionContains("title_of_marker. snippet_of_marker."));
try {
marker.click();
} catch (UiObjectNotFoundException e) {
e.printStackTrace();
}
}
MapsFragment.java
private GoogleMap mMapView;
private void loadMapLocations() {
mMapView.addMarker(new MarkerOptions()
.position(new LatLng(52.0988198,5.074657))
.title("title_of_marker")
.snippet("snippet_of_marker"));
}
输出:
W/System.err: android.support.test.uiautomator.UiObjectNotFoundException: UiSelector[CONTAINS_DESCRIPTION=title_of_marker. snippet_of_marker.]
W/System.err: at android.support.test.uiautomator.UiObject.click(UiObject.java:412)
我已经尝试了所有方法,但现在不知道如何进行。
我创建了一个示例地图并添加了一个类似于您的标记。
已开始 CulebraTester。开始测试录音。单击标记。
然后我只是添加了wait
(很快就会自动生成)来获得这个测试。
@Test
public void culebraGeneratedTest() throws Exception {
final BySelector bySelector = By.clazz(Pattern.compile(".*")).desc("title_of_marker. snippet_of_marker.").pkg("com.example.diego.mymapapplication");
mDevice.wait(Until.hasObject(bySelector), DEFAULT_TIMEOUT);
mDevice.findObject(bySelector).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
}
已将测试 class 添加到项目中。
运行 测试。
而且 有效!
这似乎是测试 CulebraTester 代码生成的好机会。
我使用了@Diego 的示例代码并将其粘贴到我的 ApplicationTest.java 中,这有效,所以我不需要使用 Culebra:
@Test
public void loginAndClickMarker() {
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
final BySelector bySelector = By.clazz(Pattern.compile(".*")).desc("title_of_marker. snippet_of_marker.").pkg("www.brandmkrs.com.damageapp");
device.wait(Until.hasObject(bySelector), DEFAULT_TIMEOUT);
device.findObject(bySelector).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
SystemClock.sleep(1000);
}
我正在尝试让 UIAutomator 单击 Google 地图上的 MarkerOptions。
build.gradle(应用级别)
dependencies {
androidTestCompile 'com.android.support.test:runner:0.3'
androidTestCompile 'com.android.support.test:rules:0.3'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}
测试类
@RunWith(AndroidJUnit4.class)
public class ApplicationTest {
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
UiObject marker = device.findObject(new UiSelector().descriptionContains("title_of_marker. snippet_of_marker."));
try {
marker.click();
} catch (UiObjectNotFoundException e) {
e.printStackTrace();
}
}
MapsFragment.java
private GoogleMap mMapView;
private void loadMapLocations() {
mMapView.addMarker(new MarkerOptions()
.position(new LatLng(52.0988198,5.074657))
.title("title_of_marker")
.snippet("snippet_of_marker"));
}
输出:
W/System.err: android.support.test.uiautomator.UiObjectNotFoundException: UiSelector[CONTAINS_DESCRIPTION=title_of_marker. snippet_of_marker.]
W/System.err: at android.support.test.uiautomator.UiObject.click(UiObject.java:412)
我已经尝试了所有方法,但现在不知道如何进行。
我创建了一个示例地图并添加了一个类似于您的标记。 已开始 CulebraTester。开始测试录音。单击标记。
然后我只是添加了wait
(很快就会自动生成)来获得这个测试。
@Test
public void culebraGeneratedTest() throws Exception {
final BySelector bySelector = By.clazz(Pattern.compile(".*")).desc("title_of_marker. snippet_of_marker.").pkg("com.example.diego.mymapapplication");
mDevice.wait(Until.hasObject(bySelector), DEFAULT_TIMEOUT);
mDevice.findObject(bySelector).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
}
已将测试 class 添加到项目中。 运行 测试。 而且 有效!
这似乎是测试 CulebraTester 代码生成的好机会。
我使用了@Diego 的示例代码并将其粘贴到我的 ApplicationTest.java 中,这有效,所以我不需要使用 Culebra:
@Test
public void loginAndClickMarker() {
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
final BySelector bySelector = By.clazz(Pattern.compile(".*")).desc("title_of_marker. snippet_of_marker.").pkg("www.brandmkrs.com.damageapp");
device.wait(Until.hasObject(bySelector), DEFAULT_TIMEOUT);
device.findObject(bySelector).clickAndWait(Until.newWindow(), DEFAULT_TIMEOUT);
SystemClock.sleep(1000);
}