C# 硒罐';在第二次导航到该页面后,找不到以前创建的IWebElement

C# 硒罐';在第二次导航到该页面后,找不到以前创建的IWebElement,c#,.net,selenium,C#,.net,Selenium,我有一个登录页面的示例测试,我想模拟一个成功的登录,然后注销,最后用错误的密码登录失败。当我第一次导航到登录页面时,我使用以下代码查找元素: //navigating to the login page driver.Navigate().GoToUrl(panel); //Verifying that the page is the one i am looking for IWebElement signUp = wait.Until((x) => { return x.FindEl

我有一个登录页面的示例测试,我想模拟一个成功的登录,然后注销,最后用错误的密码登录失败。当我第一次导航到登录页面时,我使用以下代码查找元素:

//navigating to the login page
driver.Navigate().GoToUrl(panel);

//Verifying that the page is the one i am looking for
IWebElement signUp = wait.Until((x) => { return x.FindElement(By.Id("go_sign_up")); } );
Assert.IsNotNull(signUp);
//Try to add some info to username field
username.SendKeys("blabla");
IWebElement用户名=wait.Until((x)=>{return x.FindElement(By.Id(“input-1”);})

然后,在清除Cookie后,我导航回同一登录页面,并尝试使用相同的元素:

//navigating to the login page
driver.Navigate().GoToUrl(panel);

//Verifying that the page is the one i am looking for
IWebElement signUp = wait.Until((x) => { return x.FindElement(By.Id("go_sign_up")); } );
Assert.IsNotNull(signUp);
//Try to add some info to username field
username.SendKeys("blabla");
页面中存在具有相同id的相同元素,但我在测试中遇到以下错误:
消息:OpenQA.Selenium.StaleElement引用异常:stale元素引用:元素未附加到页面文档


抱歉,如果信息不够,这是我第一次问问题。

这是因为当您离开页面并返回时,页面DOM会刷新

最快的解决方法是在返回页面后再次定位元素


我还建议您阅读有关页面对象模型的内容,并使用CacheLookup将导致过时元素引用的代码包装到此LOC中:

 int attempts = 0;
    while(attempts < 2) {
        try {
            IWebElement username = wait.Until((x) => { return x.FindElement(By.Id("input-1")); });
            result = true;
            break;
        } catch(StaleElementException e) {
        }
        attempts++;
    }
int尝试次数=0;
而(尝试次数<2次){
试一试{
IWebElement用户名=wait.Until((x)=>{return x.FindElement(By.Id(“input-1”);});
结果=真;
打破
}捕获(StaleElementException e){
}
尝试++;
}