如果隐式等待设置为 0 秒,为什么 Android 上的 Appium 无法找到对象?

Why does Appium on Android fail to find objects if Implicit Wait is set to 0 seconds?

我正在试用 Appium 进行原生应用测试。到目前为止,我一直在本机 Android 设备和模拟器(与 Sauce Labs 等服务一起使用)上评估 Appium。

我想放弃使用隐式等待,因为在我的 Selenium 体验中,它们并不总是可靠的,而且与 FluentWait/WebDriverWait 配合得不好。

当我将隐式等待设置为 0 或完全禁用它时,我发出的第一个 Selenium 命令将失败并显示无用的错误消息:

代码

@BeforeMethod
public void setUp(){
        driver =  new AndroidDriver(serverAddress, capabilities);
}

@Test
public void myTest(){

    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.name("MyElement")));

}

错误: org.openqa.selenium.WebDriverException: 处理命令时发生未知的服务器端错误。

我发现如果我使用 Thread.sleep(3000) 手动等待大约 3 秒;首次启动 AppiumDriver 实例后,一切正常。

Appium 似乎允许您发送命令,即使被测应用尚未完成启动也是如此。如果应用程序尚未完成启动,则会出现该错误。

是否有比使用 Thread.sleep(3000); 更好的解决方案?我可以配置 Appium 的服务器来避免这种情况吗?

是的,有比睡眠更好的解决方案。设置能力 appWaitActivity and/or appWaitActivity.

是的,你可以使用这个:

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(locator);