OpenQA.Selenium.StaleElementReferenceException陈旧元素引用:元素未附加到页面文档

时间:2017-11-01 02:50:35

标签: c# selenium selenium-chromedriver

我正在构建一个擦除网站的c#应用程序。我认为这个问题是由于在一次又一次提交表单后重新加载页面引起的。我必须从选择列表中选择一个选项,然后按Enter键并等待页面重新加载新结果。但重新加载后会导致此错误;

Exception thrown: 'OpenQA.Selenium.StaleElementReferenceException' in WebDriver.dll
An exception of type 'OpenQA.Selenium.StaleElementReferenceException' occurred in WebDriver.dll but was not handled in user code
stale element reference: element is not attached to the page document (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.14393 x86_64)

我的代码看起来像这样;

SelectElement departmentSelect = new SelectElement(driver.FindElement(By.Id("select")));
IList<IWebElement> departmentOptions = departmentSelect.Options;
foreach (IWebElement option in departmentOptions)
{
    new SelectElement(driver.FindElement(By.Id("select"))).SelectByText(option.Text);
    driver.FindElementById("butSearchByType").Click();
}

我也尝试了类似的东西;

WebDriverWait wait = new WebDriverWait(driver, System.TimeSpan.FromSeconds(2));
new SelectElement(driver.FindElement(By.Id("select"))).SelectByText(option.Text);
driver.FindElementById("butSearchByType").Click();
var ready = wait.Until(ExpectedConditions.ElementExists(By.Id("select")));

这已经没时间了,我得到了时间的例外。

1 个答案:

答案 0 :(得分:0)

当您想在页面上执行某些操作但页面未完全加载时,您遇到了问题。 在我的项目之前,我正在等待页面完全加载,以及ajax。

这是一个示例代码:

Wait.Until(driver1 => ((IJavaScriptExecutor)Driver.WebDriver).ExecuteScript("return document.readyState").Equals("complete"));

等待是WebDriverWait。

对于ajax来说是类似的:

ExecuteScript("return jQuery.active == 0")