我无法在androidTest中使用UiAutomator找到元素(UiObject2
)。我获得了UiDevice实例,并尝试用这个找到对象:
MY_UI_DEVICE.findObject(By.res(CURRENT_PACKAGE, id));
CURRENT_PACKAGE
是我的应用MY_UI_DEVICE.getCurrentPackageName()
的包。我也尝试过这个:
MY_UI_DEVICE.wait(Until.findObject(By.res(CURRENT_PACKAGE, id)), 10000);
我可以看到应用程序在右侧屏幕上等待10秒钟(所需对象仍然存在),但是超时后无法找到它并且测试失败。它总是在模拟器(API 23)上失败,但在真实设备(API 25)上很少有效。
当我调试代码时,我可以看到手动我可以通过在getChild(index)
上调用AccessibilityNodeInfo
方法的序列来获取正确的元素,但是在运行时它甚至会失败,即使应用程序在右边等待屏幕我期望的具体元素。
我正在使用不同的UiDevice功能,但没有任何帮助和我的想法,所以任何帮助将不胜感激。
答案 0 :(得分:2)
我的测试有两个问题:
UiDevice
实例(作为util类中的静态字段)。我将其移至@Before
,这有助于部分解决问题。 UiDevice
获取的包名称搜索元素时发生了另一个问题。我在google samples中使用InstrumentationRegistry.getTargetContext().getPackageName();
取代了包裹。 答案 1 :(得分:0)
确保您的Test方法抛出UiObjectNotFoundException
。我也遇到了UiObject2这个问题,直到我开始强制抛出错误
@Test
public void clockTest() throws UiObjectNotFoundException, InterruptedException {
mDevice.click(1146,37); //click on clock top right corner
Thread.sleep(1500);//wait 1.5 seconds for screen to load
mDevice.click(1138,135);//clicks in shell
Thread.sleep(1500);//wait 1.5s for screen to load
UiObject2 dTSettingsButton = mDevice.findObject(By.text("Date & Time Settings"));
//assertNotNull(dTSettingsButton);//find and assert the settings button
dTSettingsButton.clickAndWait(Until.newWindow(), LAUNCH_TIMEOUT);//clicks the settings button
UiObject2 timeFormatButton = mDevice.findObject(By.text("Select Time Format"));
assertNotNull(timeFormatButton);//find and assert timeformat button
timeFormatButton.clickAndWait(Until.newWindow(), LAUNCH_TIMEOUT);//click timeformat button
UiObject2 twelveHourButton = mDevice.findObject(By.res("com.REDACTED.settings:id/first_btn"));
assertNotNull(twelveHourButton);//find and assert twelvehour button
twelveHourButton.clickAndWait(Until.newWindow(), LAUNCH_TIMEOUT);//click twelvehour button
}
答案 2 :(得分:0)
尝试使用UiSelector方法。这对我来说要比按选择器好得多