如何向 Appium 发送 'fake' 命令

How to send a 'fake' command to Appium

我正在尝试使用 appium 测试我的 android 应用程序,我正在寻找解决以下问题的方法: 在我的应用程序中,我有一个部分需要时间(用于图像处理),有时可能需要一分钟、两分钟甚至更长时间,具体取决于图像大小、质量。

在我的测试用例中,我尝试等待 30 秒,然后检查图像处理是否完成。

问题是如果我等得太久,我会收到下一条消息: 信息:[调试] 60 秒内未收到新命令,正在关闭...

我不想设置 'newCommandTimeout' 因为我想缩短测试时间并且我想测试检查它是否每隔一段时间就完成一次。 此外,我不能使用等待元素或类似 appium API 的东西,因为我使用的是第三方库,它会告诉我图像处理何时完成。

我的问题是,有什么方法可以向 appium 发送 'fake' 命令,这样我的线程每 30 秒恢复一次工作,如果我发现图像处理未完成,我将发送一个假的命令然后回去休眠30秒不用担心appium服务器会因为超时而关闭?

不确定您正在使用什么等待命令。使用这个:

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

这将等到它在屏幕上找到该元素。

这里补充评论:

为了解决这个问题,我使用了带有自定义 ExpectedCondition 的 WebDriverWait,它看起来像:

new WebDriverWait(mDriver, 30)           // 30 is for the time out
    .withMessage("You can set any custom error message")
    .until(new ExpectedCondition<Boolean>() {
          @Override
          public Boolean apply(WebDriver d) {
                //This function will be called repeatedly until 
                //the return value will be true 
          }

    });

您可以看到 WebDriverWait 的其他实现,实际上我认为它适用于任何对象而不是布尔值。