Java Appium';s隐式等待不起作用
我正在使用Appium自动化iOS应用程序,但遇到了一个问题,以前有人遇到过同样的问题吗 Appium的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
隐式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(),但测试仍在不停地运行。我理解你提到的使用显式等待的方式,它工作得很好。但是,如果我找不到可访问的元素怎么办?期待您的回复