提问者:小点点

Selenium-如何验证页面刷新时出现的加载器


我有这个测试用例:

>

  • 刷新页面
  • 加载器会出现一段时间。这实际上只是一个DIV

    aria-label='加载'

    验证页面刷新时加载器元素在页面上是否可见

    这是我写的代码:

       _driver.Navigate().Refresh();
        IList<IWebElement> loaders = _driver.FindElements(By.XPath("//*[@aria-label='Loading']"));
        loaders.Count.Should().Be(1);
    

    我的问题是,当刷新()执行时,页面刷新得如此之快,以至于后续行永远找不到元素。我在想写一些冗长的循环,在后台线程中不断刷新页面,而前台线程检查loader的存在。一旦找到loader,它将停止后台线程。

    这是一个好的方法吗?有什么替代方案?或者,这个测试用例不适合自动化。

    很多谢谢


  • 共2个答案

    匿名用户

    所以你可以在之后添加2或3秒的等待。刷新(),之后你可以继续你的操作。所以你已经创建了循环,循环将被迭代,直到它到达元素,这就是为什么你的循环结束得如此之快,你可以创建一段时间的循环,比如在i=0开始循环,然后迭代,直到i到达100,在这两者之间,你可以找到元素或检查元素的可用性。我还与您分享了使用各种类型WebDriver命令检查Web元素可见性的链接

    很高兴能帮上忙让我们知道如果成功了

    https://www.softwaretestinghelp.com/webdriver-commands-selenium-tutorial-14/

    匿名用户

    这里有一个想法。我自己没有测试过它,但是试着根据你的情况调整它,看看它是否有效。

    如果尝试单击不再存在于DOM中的元素,可能会出现陈旧元素引用异常。

    因此,您可以使用try-catch块来捕获该异常:

    try {
        _driver.Navigate().Refresh();
        IList<IWebElement> loaders = _driver.FindElements(By.XPath("//*[@aria-label='Loading']"));
        loaders.Count.Should().Be(1);
    } catch (StaleElementReferenceException) {
        //do something with this
    }