[英]Appium's implicitlyWait does not work
我正在使用 Appium 來自動化一個 iOS 應用程序,但遇到了一個問題,有沒有人遇到過同樣的問題?
Appium 的implicitlyWait
等待 API 似乎不起作用。 我正在使用 Java 和 JUnit 來運行測試,這是代碼行:
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
我已經檢查了 appium 控制台中的調試信息,它看起來是正確的:
信息:[debug] 將 iOS 隱式等待設置為 50000 毫秒
我的環境:
最新的 Appium 1.2.1、Java 客戶端庫 1.6.1、Selenium Java 語言綁定 2.42.2 和 Sauce Lab 提供的示例應用程序“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 中,可以通過這種方式設置隱式方式:
爪哇代碼:
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);
試試這個:
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 ;
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.