【问题标题】:Selenium-IDE: How to verify/assert page refreshSelenium-IDE:如何验证/断言页面刷新
【发布时间】:2013-09-09 08:02:15
【问题描述】:

我在一个页面上有一个链接,点击它会刷新这个页面。

如何使用 Selenium-IDE 验证页面是否确实已刷新/重新加载?

【问题讨论】:

标签: selenium selenium-ide


【解决方案1】:

我已经通过断言最初存在于页面上的元素在刷新后立即不存在于页面上来解决该问题,然后等到页面完全刷新,并断言该元素再次存在。

  1. refreshAndWait / 或 clickAndWait 刷新链接/按钮
  2. assertElementNotPresent somePageSpecificElement / 检查是否真的执行了刷新
  3. 暂停 2000 毫秒 / 等待刷新结束
  4. assertElementPresent somePageSpecificElement / 检查是否真的执行了刷新并且已经加载了相同的页面

更新: 如果存在一些文本框元素,也可以轻松验证页面刷新。只需使用 type 命令在文本框字段中插入一些文本,然后 刷新 页面,文本框内的文本应该会恢复到原来的状态。

【讨论】:

    【解决方案2】:

    简单的方法是等到页面上的最后一个元素。

    在 Selenium-IDE 中,您可能会使用很多 wait*-commands 来执行此操作,例如:

    waitForElementPresent [element_xPath]

    waitForVisible [element_xPath]

    等等。

    【讨论】:

      【解决方案3】:

      如果您像我一样发现检查元素的可见性和不可见性可能不可靠,那么还有另一种选择。

      如果你的网站使用jQuery,我发现最可靠的方法是检查jQuery.active的状态来确定页面刷新。

      例如,在 C# 中,我使用以下方法:

      public bool CheckPageHasRefreshed()
          {
              try
              {
                  // Wait for jQuery to become active (the page is refreshing)
                  wait.Until(x => (((IJavaScriptExecutor)WebDriver).ExecuteScript("return jQuery.active != 0")));
                  // Wait for jQuery to become inactive (the page refresh has completed)
                  wait.Until(x => (((IJavaScriptExecutor)WebDriver).ExecuteScript("return jQuery.active === 0")));
                  return true;
              }
              catch (WebDriverTimeoutException)
              {
                  return false;
              }
          }
      

      这是有效的,因为 jQuery.active 只会在页面上的所有后端加载活动完成时返回 0。如果事情还在幕后发生,那就不会了。

      【讨论】:

        【解决方案4】:

        您可以假设 - 如果找到了元素,并且调用了 element.click(),则该元素已被单击。

        但是为了良好的实践 - 如果在 DOM 中找不到元素,您应该捕获异常。 即如果它进入 catch 块,那么你知道页面没有被刷新。

        try{
            WebElement element = driver.findElement(selector); //The refresh link user clicks
            element.click();
            clicked = true;
        }catch(Exception e){
            clicked = false;
            throw new ElementNotFoundException();
        }
        

        【讨论】:

        • 只是一个说明 - 你的回答建议使用 Selenium WebDriver,而提问者想要 Selenium IDE 方法
        猜你喜欢
        • 2014-07-12
        • 2019-06-16
        • 1970-01-01
        • 2017-12-13
        • 2011-08-10
        • 1970-01-01
        • 2017-05-13
        • 2019-06-25
        • 1970-01-01
        相关资源
        最近更新 更多