Selenium在第二次导航到页面后无法找到先前创建的IWebElement

时间:2018-06-21 14:09:56

标签: c# .net selenium

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

entryStartingPosY

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

IWebElement username = wait.Until((x) => { return x.FindElement(By.Id("input-1")); });

页面中存在具有相同ID的相同元素,但是在测试中出现以下错误: //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");

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

2 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为当您离开页面并返回时,页面 DOM已刷新

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

我还建议您阅读有关页面对象模型和使用CacheLookup的信息

答案 1 :(得分:0)

您可以将导致陈旧元素引用的代码包装到此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++;
    }