我正在使用Selenium Remote WebDriver。我从csv文件中读取所有链接并针对这些链接运行测试。但有时我会收到 404 响应。
在Selenium WebDriver中有什么方法可以检查我们是否得到HTTP响应200?
无法直接在 WebDriver API 中获取 HTTP 状态代码。这是一个长期存在的功能请求,可能永远不会在项目中实现。问题的正确解决方案是将浏览器配置为使用可以拦截和记录网络流量的代理,并让您的代码查询该代理以获取您所追求的结果。
当然,如果您感兴趣的只是检查链接以确保它返回 200 状态代码,则可以轻松地使用您希望导航到该链接的任何语言的 HTTP 客户端库。无需使用 WebDriver,除非您需要以某种方式操作生成的页面。
在使用硒之前,你可以使用类似的东西:
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);
.
.
.
}
}
我们的网站有一个自定义错误页面,用于显示 404 个响应。 该页面上的页面标题显示"404 - 找不到页面"。 我使用驱动程序。标题并检查文本"未找到"。
使用 C#,我编写了以下内容:
// Check for 404 page:
var pageNotFoundTitleText = "not found";
if (driver.Title.ToLower().Contains(pageNotFoundTitleText)) throw new Exception("### 404 - Page Not found: " + link);
RestAssuredimport 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);
};
这是一种方式(我认为:P)。
您可以使用 JavaScript 检查页面上的 http 状态。JS可以通过以下方式在Java中调用:
((JavascriptExecutor) webDriver).executeScript(js);
最好的选择是使用 JS 函数在节点硬盘上创建虚拟网页,并在该页面上的 executeScript() 中调用该函数。
您也可以尝试在executeScript()中发送所有JS代码,但我不确定这是否有效。