我按照这里写的: WebDriver Selenium API: ElementNotFoundErrorException when Element is clearly there !
我的代码如下:
Function<WebDriver, WebElement> presenceOfElementLocated(final By locator) {
return new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
};
}
.......
driver.get(baseUrl);
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(presenceOfElementLocated(By.className("classname")));
findByClassAndName(driver, "x-tree3-node-text", "Name1").click();
问题是,这似乎没有做任何事情。它不起作用,我甚至看不到任何等待网页gui的痕迹。我通过超时隐含等待得到同样的...任何人都可以帮忙吗?
答案 0 :(得分:1)
按如下方式创建功能:
public void Wait (string element) // Wait function to wait for element
{
for (int second = 0; ; second++)
{
if (second >= 60) Assert.Fail("timeout");
try
{
if (IsElementPresent(By.LinkText(element))) break;
}
catch (Exception)
{ }
Thread.Sleep(1000);
}
}
现在调用此函数,您要等待元素,如下所示:
string element="<element name>";
Wait(element);
答案 1 :(得分:1)
你必须抓住Throwables 从ExpectedCondition或你的函数抛出(apply()方法适合那个)并且返回null所以Wait.until()继续要运行 - 请参阅http://rostislav-matl.blogspot.com/2011/05/moving-to-selenium-2-on-webdriver-part.html了解详细示例。