Java Appium';s隐式等待不起作用

Java Appium';s隐式等待不起作用,java,ios,selenium,appium,Java,Ios,Selenium,Appium,我正在使用Appium自动化iOS应用程序,但遇到了一个问题,以前有人遇到过同样的问题吗 Appium的隐式waitAPI似乎不起作用。我正在使用Java和JUnit运行测试,下面是一行代码: driver.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS) 我已检查了appium控制台中的调试信息,它看起来正确: 信息:[调试]将iOS隐式等待设置为50000ms 我的环境: 最新的Appium 1.2.1、Java客户端库1.6.1

我正在使用Appium自动化iOS应用程序,但遇到了一个问题,以前有人遇到过同样的问题吗

Appium的
隐式wait
API似乎不起作用。我正在使用Java和JUnit运行测试,下面是一行代码:

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

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

信息:[调试]将iOS隐式等待设置为50000ms

我的环境:

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


提前感谢您的回复。

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

在Appium中,可以通过以下方式设置隐式方式:

Java代码:

AppiumFieldDecorator decorator = new AppiumFieldDecorator(driver);
decorator.resetImplicitlyWaitTimeOut(50, TimeUnit.SECONDS);
PageFactory.initElements(decorator, this /* refers to current page object class*/);
这样的超时将一直有效

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

当使用web驱动程序时,您可以通过以下方式执行此操作:

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);
试试这个:

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

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

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

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

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

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

希望这能有所帮助

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