我正在编写uiautomator测试用例,用于在模拟器中运行Android应用程序。这就出现了问题,假设我在不同的仿真器机器上运行Ui测试用例。如何确保录音机和播放机以相同的速度作出反应。例如,回放机器可能比记录机器反应慢。因此,当测试用例触发按钮中的点击动作时,回放机器可能没有在布局中加载该按钮。 uiautomator中是否有任何机制可以始终同步测试用例的播放和机器反应?我担心如果播放机器太慢,那么可能会抛出一些未解决的异常。
答案 0 :(得分:4)
通常,您可以使用UiDevice.wait(..)等函数暂停,直到您的测试继续进行。
例如,如果您有一个按钮可以打开包含您要与之交互的元素的屏幕,则在尝试与这些元素进行交互之前,您需要等待新内容出现。
这看起来像是:
detailsButton.click();
device.wait(Until.hasObject(By.desc("Details Pane")), TIMEOUT);
// Do something on the details pane
答案 1 :(得分:1)
UiAutomation uiAuto = InstrumentationRegistry.getIntrumentation().getUiAutomation(); //gets the UiAutomation for this execution
AccessibilityNodeInfo rootNode = uiAuto.getRootInActiveWindow(); //gets the root node of the currently visible screen
//makes sure there is a rootNode and that is has children, i.e., there is a drawn screen
while(rootNode == null || rootNode.getChildCount() == 0){
rootNode = uiAuto.getRootInActiveWindow();
}
//getting here you are sure that the new screen is drawn.
我在
之上执行此操作device.waitForWindowUpdate(packageName, timeOut)
因为在几种情况下等待将返回并且屏幕的根节点尚未被访问,导致将来的UiObjectNotFoundException。