[英]Please suggest a wait function for selenium+java
我正在自動化一個應用程序,顯式等待不起作用。
我的要求是等待特定元素,直到它被加載/可見或可點擊以執行下一步操作。
我顯式地嘗試了所有預期的條件,但它失敗了。 只有睡眠在起作用。
我注意到的一件事是,Web 瀏覽器未加載,但頁面正在加載,因此顯式功能不起作用。
有人可以幫助我嗎?
請參考附件
由於您的問題相當籠統,我現在只能提供一般性的答案。 您可以等到整個頁面加載完畢后再繼續測試。 (我建議這樣做,因為您聲稱在進行測試時瀏覽器似乎沒有完全准備好)
這可以使用以下代碼完成:
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"))
*此代碼不是我的,它來自
在 Selenium 中等待頁面加載
Explicit Wait即WebDriverWait已被證明和高效,並且它與ExpectedConditions完美結合。
由於您的要求是等待特定元素,直到它被加載/可見或可點擊以執行下一個操作,您可以使用以下代碼塊:
WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.elementToBeClickable(By.id("myDynamicElement")));
myDynamicElement.click();
當 Web 元素加載時間比平時多一點時,就會出現此類問題。 在這種情況下,我們在給定的時間間隔內使用輪詢機制,即 fluentWait。 下面是有用的代碼。
public WebElement fluentWait(final By locator) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver _driver) {
return driver.findElement(locator);
}
});
return foo;
};
selenium 有三種等待。
隱式等待
driver.manage().timeouts().implicitlyWait(TimeOut, TimeUnit.SECONDS);
顯式等待
WebDriverWait wait = new WebDriverWait(WebDriver,TimeOut);
流暢的等待
Wait wait = new FluentWait(WebDriver reference).withTimeout(timeout, SECONDS).pollingEvery(timeout, SECONDS).ignoring(Exception.class);
有關如何使用所有等待示例的更多信息,請轉到以下 URL。
https://trickyautomationworld.blogspot.in/2018/02/implicit-wait-vs-explicit-wait-vs.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.