使用Selenium WebDriver检查HttpResponse是否为OK(200)

22

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

在Selenium WebDriver中有没有一种方法可以检查我们是否获得HTTP响应200?

5个回答

32

在WebDriver API中没有直接获取HTTP状态码的方法。这是一个长期存在的功能请求, 很可能永远不会被实现。解决你的问题的正确方法是配置浏览器使用代理来拦截和记录网络流量,并让你的代码查询代理以获取你想要的结果。

当然,如果你只是想检查一个链接是否返回200状态码,你可以很容易地使用任何语言的HTTP客户端库来导航到该链接。除非你需要以某种方式操作结果页面,否则没有必要使用WebDriver。


4
在使用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);
            .
            .
            .
   }
}

1
谢谢。我可以在实际开始测试之前检查链接。但是我正在寻找webdriver api的答案。它是否能够提供一些方法来检查http状态。 - Aniruddha

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

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

-3

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

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


通常情况下,浏览器不会通过JavaScript向页面公开HTTP状态码,至少没有任何被广泛理解和跨浏览器支持的方式。 - JimEvans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接