我们可以有一个通用的等待方法......即(1.等待页面加载2.找到元素3.如果没有找到刷新),这一直持续到fluentwait超时。
答案 0 :(得分:1)
你可以使用 WebdriverWait - (1.等待页面加载2.找到元素3.如果没有找到刷新)
WebDriverWait wait = new WebDriverWait(driver, 18); // Times Out after 18 Seconds
PageUtil.refreshObject(driver, By.linkText("Element")); // refresh the Element
wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Element"))); // wait till Element is Enabled and Visible before Clicking on that Element
/**
*Pass the Control to that Element and Click on that Element (preferred in IE)
*
*/
WebElement element = driver.findElement(By.linkText("Element"));
element.sendKeys(org.openqa.selenium.Keys.CONTROL);
element.click();
以下是 RefreshObject 方法, PageUtil 是ClassName
public static WebElement refreshObject(WebDriver driver, By locator) {
int counter = 0;
try {
counter = counter + 1;
return driver.findElement(locator);
}
catch (StaleElementReferenceException e) {
return refreshObject(driver, locator);
}
}
答案 1 :(得分:0)
你有特殊的商业案例需要这个吗?如果不这样做,则可以在设置驱动程序对象时设置隐式等待。在c#中它看起来像:
myDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
很多人会说你应该避免隐式等待,但是如果你觉得你需要建立一个方便的方法,那么隐含的等待是可取的。