当前位置: 首页 > 知识库问答 >
问题:

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

濮阳鸿祯
2023-03-14

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

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个答案

暨高洁
2023-03-14

当你想在页面上做一些事情,但是页面没有完全加载时,你有一个问题。在我的项目任何行动之前,我等待页面完全加载,也为ajax。

这是一个示例代码:

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

在哪里等待是一个WebDrive等待。

对于ajax,情况类似:

ExecuteScript("return jQuery.active == 0")
 类似资料: