如何在另一个元素中处理元素的StaleElementReferenceException

时间:2018-04-13 01:31:24

标签: c# selenium staleelementreferenceexception

我有一个名为Navigation的类,它具有用于浏览网站页面的简单功能。

    public class Navigation
{
    public IWebElement Inner { get; set; }

    private IWebElement Next => Inner.FindElement(By.ClassName("Next"));

    public void NextPage() => Next.Click();
}

上面的导航出现在每个页面上,所以我将它放在一个BasePage类中(根据页面对象模型)

    public class BasePage
{
    protected IWebDriver driver;

    public Navigation navigation => new Navigation { Inner = driver.FindElement(By.ClassName("footer"))};
}

在我的测试课程中,我有以下内容

public class Test 
    {
      BasePage basepage = new BasePage();

      basepage.navigation.NextPage();
      basepage.navigation.NextPage(); //NOT WORKING
    }

单击“下一步”按钮第一次工作但第二次失败。我在Navigation类的 NextPage()行上得到StaleElementReferenceException。我明白为什么会这样 - 我已经导航到一个新页面,因此页脚下一个元素现在都已经过时了。

我可以在Navigation类中再次找到Next按钮,但我希​​望Navigation类保持内部页脚元素的范围(即我不想要做一个驱动程序 .FindElement(By.ClassName(“Next”))并再次搜索整个页面以获取Next按钮

是否有一种干净的方式可以再次找到页脚元素?理想情况下,从BasePage类中?

感谢。

0 个答案:

没有答案