【问题标题】:Checking HttpResponse OK (200) with Selenium WebDriver [duplicate]使用 Selenium WebDriver 检查 HttpResponse OK (200) [重复]
【发布时间】:2013-01-10 08:00:21
【问题描述】:

我正在使用 Selenium Remote WebDriver。我从 csv 文件中读取所有链接并对这些链接运行测试。但有时我会收到 404 响应。

Selenium WebDriver 中是否有任何方法可以检查我们是否收到 HTTP 响应 200?

【问题讨论】:

    标签: selenium-webdriver httpresponse selenium-grid


    【解决方案1】:

    无法直接在 WebDriver API 中获取 HTTP 状态代码。它是long-standing feature request,在项目中很可能是never be implemented。解决您的问题的正确方法是将您的浏览器配置为使用可以拦截和记录网络流量的代理,并让您的代码查询该代理以获得您所追求的结果。

    当然,如果您感兴趣的只是检查链接以确保它返回 200 状态代码,您可以轻松地使用 HTTP 客户端库,以您希望导航到链接的任何语言。除非您需要以某种方式操作生成的页面,否则无需使用 WebDriver。

    【讨论】:

      【解决方案2】:

      在使用 selenium 之前,你可以使用类似的东西:

      public static boolean linkExists(String URLName){
          try {
            HttpURLConnection.setFollowRedirects(false);
            HttpURLConnection con =
               (HttpURLConnection) new URL(URLName).openConnection();
            con.setRequestMethod("HEAD");
            return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
          }
          catch (Exception e) {
             e.printStackTrace();
             return false;
          }
        }
      

      以这种方式使用它:

      WebDriver driver = new FirefoxDriver();
      for(String url : csvArray){
         if(linkExists(url)){
            driver.get(url);
                  .
                  .
                  .
         }
      }
      

      【讨论】:

      • 谢谢。我可以在实际开始测试之前检查链接。但我在 webdriver api 中寻找答案。它是否给了我一些检查http状态的方法。
      【解决方案3】:

      我们的网站有一个用于 404 响应的自定义错误页面。该页面上的页面标题显示“404 - 页面未找到”。我使用 driver.Title 并检查文本“未找到”。

      使用C#,我写了以下内容:

      // Check for 404 page:
      var pageNotFoundTitleText = "not found";
      if (driver.Title.ToLower().Contains(pageNotFoundTitleText)) throw new Exception("### 404 - Page Not found: " + link);
      

      【讨论】:

        【解决方案4】:

        您可以使用 RestAssured 来做到这一点 导入静态 com.jayway.restassured.RestAssured.given;

            int returnCode = given().when().baseUri(url).get().getStatusCode();
            if (returnCode == 200) {
                webDriver.get(url);
                helper.asserts.assertTrue(helper.finder.isElementPresent(By.className("ticketType")));
            } else {
                helper.asserts.fail("This url "+url+" is returning the following code: " + returnCode);
            };
        

        【讨论】:

          【解决方案5】:

          这是一种方法(我认为:P)。
          您可以使用 JavaScript 检查页面上的 http 状态。 JS可以通过以下方式在Java中调用:
          ((JavascriptExecutor) webDriver).executeScript(js);

          最好的选择是使用 JS 函数在节点硬盘上创建虚拟网页,并在该页面上的 executeScript() 中调用该函数。
          您也可以尝试在 executeScript() 中发送所有 JS 代码,但我不确定这是否可行。

          【讨论】:

          • 浏览器通常不会通过 JavaScript 向页面公开 HTTP 状态代码,至少不会以任何易于理解的跨浏览器方式。
          猜你喜欢
          • 2019-07-08
          • 1970-01-01
          • 2014-05-13
          • 2016-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多