Appium 的implicitlyWait 不起作用

Posted

技术标签:

【中文标题】Appium 的implicitlyWait 不起作用【英文标题】:Appium's implicitlyWait does not work 【发布时间】:2014-10-18 00:20:25 【问题描述】:

我正在使用 Appium 自动化 ios 应用,但遇到了问题,以前有人遇到过同样的问题吗?

Appium 的implicitlyWait API 似乎不起作用。我正在使用 Java 和 JUnit 运行测试,代码如下:

driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

我已经检查了 appium 控制台中的调试信息,它看起来正确:

info: [debug] 将 iOS 隐式等待设置为 50000 毫秒

我的环境:

最新的 Appium 1.2.1、Java 客户端库 1.6.1、Selenium Java 语言绑定 2.42.2 和 Sauce Lab 提供的示例应用程序“UICatalog”。

提前感谢您的回复。

【问题讨论】:

【参考方案1】:

设置隐式超时的新方法是使用代码

AppiumFieldDecorator decorator = new AppiumFieldDecorator(mobDriver);
decorator.DEFAULT_IMPLICITLY_WAIT_TIMEOUT = longValue;
decorator.DEFAULT_TIMEUNIT = TimeUnit.TimeUnit ;

希望对你有帮助

【讨论】:

【参考方案2】:

如果您使用的是 PageFactory 模型,您可以使用 initElements() 方法指定隐式等待,如下所示 -

PageFactory.initElements(new AppiumFieldDecorator(driver, 10, TimeUnit.SECONDS), this);

我已经在 Appium 1.6 上试过了,效果很好。

【讨论】:

【参考方案3】:

试试这个:

public static void WaitForElementPresent1(String locator, int timeout)

    WebDriverWait wait = new WebDriverWait(driver, timeout);
    try   
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator)));
     catch (Exception e)
        e.printStackTrace();
    
 

【讨论】:

【参考方案4】:

在 Appium 中可以这样设置隐式方式:

Java 代码:

AppiumFieldDecorator decorator = new AppiumFieldDecorator(driver);
decorator.resetImplicitlyWaitTimeOut(50, TimeUnit.SECONDS);
PageFactory.initElements(decorator, this /* refers to current page object class*/);

这种超时将一直有效。

改变它是不可能的(至少我不知道)。

当使用网络驱动程序时,您可以这样做:

driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
// some actions for which you don't want to wait implicitly
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);

【讨论】:

【参考方案5】:

您发布的代码管理超时等待最多 50 秒。它不会让司机等待 50 秒。您可以像这样使用等待:

 driver.wait(); //this will wait a max of 50 seconds cuz you said so

如果你问我你希望在 Webdriver 上使用等待的正确方式是:

WebDriverWait wait;
wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.elementToBeClickable(By.id("blabla"));

上面的代码检查 blabla 是否可以点击,直到该条件被证明或驱动程序等待 60 秒(如上所述)过去。

【讨论】:

感谢重播。我尝试在设置隐式等待后使用 driver.wait() ,但测试仍在不停地运行。我理解你提到的使用显式等待的方式,它工作正常。但是如果我找不到 elementToBeClickable 怎么办?期待您的回复

以上是关于Appium 的implicitlyWait 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

appium验证码输入笔记

appium-代码优化--H5页面点击后元素变更,查找元素时,找不到元素

Sendkeys 在使用 Appium 的 Winappdriver 中不起作用

使用 codeceptJS 在 appium 中单击 Element 不起作用

Appium 中的 waitAction(Duration) 不起作用

点击选项在 Appium 程序中不起作用