Appium隐含地等不起作用

时间:2014-08-24 20:17:47

标签: java ios selenium appium

我正在使用Appium来自动化iOS应用但遇到了问题,之前是否有人遇到过同样的问题?

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

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

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

  

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

我的环境:

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

预先感谢您的回复。

5 个答案:

答案 0 :(得分:1)

您发布的代码管理超时,等待最多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秒(如上所述)通过驱动程序等待。

答案 1 :(得分:0)

在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);

答案 2 :(得分:0)

试试这个:

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();
    }
 }

答案 3 :(得分:0)

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

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

我已经尝试过使用Appium 1.6,它运行正常。

答案 4 :(得分:0)

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

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

希望这有帮助