我正在自动化应用程序,显式等待无效。
我的要求是等待特定元素,直到它被加载/可见或可点击以执行下一步操作。
我在显式方面尝试了所有预期的条件,但它失败了。只有睡觉才有效。
我注意到的一件事是,网页浏览器没有加载但页面正在加载,因此显式功能无效。
有人可以帮助我吗?
请找到附件
答案 0 :(得分:0)
由于您的问题相当普遍,我现在只能提供一般答案。您可以等到整个页面都已加载,然后再继续测试。 (我建议这样做,因为您声称在进行测试时浏览器似乎没有完全准备好的问题)
可以使用以下代码完成:
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"))
*此代码不是我的源代码 Wait for page load in Selenium
答案 1 :(得分:0)
明确等待,即WebDriverWait已被证明&amp;效率很高,与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();
答案 2 :(得分:0)
当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;
};
答案 3 :(得分:0)
硒中有三种等待类型。
隐含等待
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