22

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

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

4

5 回答 5

31

无法直接在 WebDriver API 中获取 HTTP 状态代码。这是一个长期存在的功能要求,很可能永远不会在项目中实现。解决您的问题的正确方法是将您的浏览器配置为使用可以拦截和记录网络流量的代理,并让您的代码查询该代理以获得您所追求的结果。

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

于 2013-01-27T12:08:38.210 回答
3

before using selenium, you could use something like:

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;
    }
  }

Using it in this way:

WebDriver driver = new FirefoxDriver();
for(String url : csvArray){
   if(linkExists(url)){
      driver.get(url);
            .
            .
            .
   }
}
于 2013-01-26T13:23:32.047 回答
1

我们的网站有一个用于 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);
于 2015-01-05T17:06:04.250 回答
-2

您可以使用 RestAssured import static 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);
    };
于 2015-01-13T02:28:43.223 回答
-3

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

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

于 2013-01-29T14:13:03.840 回答