等待元素可见的正确方法有问题。
让我描述页面是如何工作的。页面已加载,显示下拉列表,但随后出现了进度条(jquery block UI),因为根据某些条件,数据是从db加载的。
所以我使用了两个方法,一个用于等待元素存在,然后等待消失,但在某些场合(可能还有其他方式加载等)我得到了Internet Explorer崩溃(所以selenium也不例外,但IE的崩溃)。下面的方法和执行:
public IWebElement WaitForPageElementToLoad(By by, IWebDriver driver, int timeInSeconds)
{
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeInSeconds));
wait.Until(ExpectedConditions.ElementIsVisible(by));
return driver.FindElement(by);
}
public void WaitForPageElementToBeRemoved(By by, IWebDriver driver, int timeInSeconds)
{
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeInSeconds));
wait.Until<bool>((d) =>
{
try
{
IWebElement element = d.FindElement(by);
return false;
}
catch (NoSuchElementException)
{
return true;
}
});
}
执行:
WaitForPageElementToLoad(By.XPath("//div[@class='blockUI blockOverlay']"), ieDriver, 25);
WaitForPageElementToBeRemoved(By.XPath("//div[@class='blockUI blockOverlay']"), ieDriver, 25);
WaitForPageElementToLoad(By.Id("clientSelector"), ieDriver, 25);
我认为webdriver正在搜索某些工作中的元素,我不知道如何弄清楚,正确编写它。也许你会有一些提示等等。