現在の BrowserStack API の最も便利な機能の 1 つは、セッションを失敗したテストとしてマークできることです。
他の Selenium ハブ/ノード システムと同様に、BrowserStack は、ユーザーがブラウザーにコマンドを送信する理由を知りません。要求したコマンドを実行するだけです。したがって、テストがいつ失敗したかを知る方法はありません。
ただし、API を使用してテストが失敗したことを伝えることができるため、BrowserStack UI でセッションが失敗としてマークされます。その後、失敗したセッションのみをフィルタリングして調査できます。
これは Python ではなく Java で書かれていますが、失敗したテストを反映するようにセッションを更新する方法を示すサンプル コードを次に示します。Selenium セッション ID (問題のテストを実行するときに保存する必要があります) と、テストが失敗したときに取得した例外を渡すだけです。
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import com.unblu.automation.support.settings.Prop;
import com.unblu.automation.support.settings.Settings;
import org.openqa.selenium.remote.SessionId;
public class BrowserStackUpdater {
private void markSessionAsFailed(SessionId sessionId, Throwable e) {
var url = "https://api.browserstack.com/automate/sessions/" + sessionId + ".json";
try {
var userName = "BROWSERSTACKUSERNAMEHERE";
var key = "BROWSERSTACKKEYHERE";
var result = Unirest.put(url)
.basicAuth(userName, key)
.field("status", "failed")
.field("reason", e.toString())
.asString();
System.out.println("Marking test failed; reply from BrowserStack: " +
result.getStatus() + " : " + result.getBody());
}
catch (UnirestException ue) { ue.printStackTrace(); }
}
public void markTestFailedInBrowserStack(Iterable<SessionId> sessionIds, Throwable e) {
var env = Settings.getString(Prop.runEnvironment);
if (env.equals("BrowserStack")) {
for (var sid : sessionIds) {
markSessionAsFailed(sid, e);
}
}
}
}