Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果隐式等待设置为0秒,为什么Android上的Appium找不到对象?_Java_Android_Selenium_Appium - Fatal编程技术网

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

Java 如果隐式等待设置为0秒,为什么Android上的Appium找不到对象?,java,android,selenium,appium,Java,Android,Selenium,Appium,我正在试用Appium进行本机应用程序测试。到目前为止,我一直在本地Android设备和模拟器上评估Appium(用于Sauce Labs等服务) 我不想使用隐式等待,因为在我的Selenium体验中,它们并不总是可靠的,也不能很好地使用FluentWait/WebDriverWait 当我将Implicit Wait设置为0或完全禁用它时,我发出的第一个Selenium命令将失败,并显示一条无用的错误消息: 代码 @BeforeMethod public void setUp(){

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

我不想使用隐式等待,因为在我的Selenium体验中,它们并不总是可靠的,也不能很好地使用FluentWait/WebDriverWait

当我将Implicit Wait设置为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
和/或
appWaitActivity

是的,您可以使用以下功能:

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

你能分享appWaitActivity的完整语法吗?或者分享相关链接,用户可以在其中看到如何使用它的详细信息。你可以从Android API文档中阅读更多关于活动的信息:,在这种情况下,webdriverwait没有帮助。真正的问题是Appium还没有完成我的应用程序的启动,所以我遇到了一个外部异常。见基里尔的答案。我添加了一个代码段。此外,@kirill-zhukov提供了答案。需要告知Appium等待应用程序实际完成加载(即显示特定活动)。如果不这样做,它将先执行Selenium命令,然后才能执行它们。