SeleniumRemoteWebDriverを使用しています。csvファイルからすべてのリンクを読み取り、それらのリンクに対してテストを実行します。しかし、時々私は404応答を受け取ります。
Selenium WebDriverにHTTP応答200を取得することを確認する方法はありますか?
SeleniumRemoteWebDriverを使用しています。csvファイルからすべてのリンクを読み取り、それらのリンクに対してテストを実行します。しかし、時々私は404応答を受け取ります。
Selenium WebDriverにHTTP応答200を取得することを確認する方法はありますか?
WebDriverAPIで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-ページが見つかりません」と表示されています。driver.Titleを使用して、「notfound」というテキストを確認します。
C#を使用して、次のように記述しました。
// Check for 404 page:
var pageNotFoundTitleText = "not found";
if (driver.Title.ToLower().Contains(pageNotFoundTitleText)) throw new Exception("### 404 - Page Not found: " + link);
RestAssured importstaticcom.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関数を使用してノードのハードディスクにダミーのWebページを作成し、そのページのexecuteScript()でその関数を呼び出すことです。
executeScript()ですべてのJSコードを送信することもできますが、それが機能するかどうかはわかりません。