34

WebDriver で quit() が呼び出されているかどうかを確認するには、ページ オブジェクトのコレクションをチェックする必要があります。

WebDriver の状態を確認するために、次のメソッドを作成しました。

public static boolean hasQuit(WebDriver driver) {
        try {
            driver.getTitle();
            return false;
        } catch (SessionNotFoundException e) {
            return true;
        }
}

ここに問題があります: ブール値の真実を発見するために例外をスローしてキャッチする必要があるのは好きではありませんが、WebDriver APIにはドライバーが終了したかどうかを確認する方法が用意されていないため、選択の余地がないようです。

私の質問は、WebDriver が終了したかどうかを確認するより良い方法はありますか?

ここで同様の(そしてより一般的な)質問を見つけましたが、質問には試したコードがありませんでした。唯一の答えは、終了後に WebDriver を常に null に設定することでした(これは必ずしも制御できません)。 .

4

3 に答える 3

15

状況に応じて、基本的に 2 つの方法があります。

状況 1: WebDriver の拡張は現実的なオプションではありません。

これは最も一般的な状況です。 WebDriver が終了したかどうかを知る便利な方法を必要とする実際の作業状況で Selenium を使用するほとんどの開発者は、既に確立されたテスト フレームワークで作業しており、フレームワークをリファクタリングして、WebDriver のカスタム拡張機能のみが使用されるようにしようとしている可能性があります。価値以上のトラブル。

RemoteWebDriver#stopClient()この場合、オーバーライドはオプションではないため、Sajan の回答と Gili の推奨する回答は役に立ちませ ん。(その上、たとえそうであったとしても、ほとんどの人は単純な答えを探しています。)

Selenium に付属する WebDriver の標準実装 (FirefoxDriver、ChromeDriver、InternetExplorerDriver、SafariDriver など) のみを使用している限り、WebDriver を RemoteWebDriver にキャストしてから、sessionId が null かどうかを確認できます (Pat は右側にありました)。追跡しますが、sessionId を直接呼び出す方が を使用するよりも優れていますtoString())。

public static boolean hasQuit(WebDriver driver) {
    return ((RemoteWebDriver)driver).getSessionId() == null;
}

RemoteWebDriver を実装していない WebDriver をどのくらいの頻度で使用するのでしょうか。(あまり頻繁ではありません。)

状況 2: WebDriverを現実的に拡張できます。

このような状況はあまり一般的ではありませんが、おそらく次のいずれかです:
    (a) 適切に設計され、抽象化されたフレームワークを使用するか、
    (b) セレン テスト フレームワークをゼロから開始します。

この場合、WebDriver を拡張する独自のインターフェイスを作成できます。

public interface CustomDriver extends WebDriver {

    boolean hasQuit();

}

次に、標準の WebDriver を次のように拡張できます (この例では ChromeDriver):

public class CustomChromeDriver extends ChromeDriver implements CustomDriver {

    boolean hasQuit = false;

    @Override
    public boolean hasQuit() {
        return hasQuit;
    }

    @Override
    public void stopClient() {
        super.stopClient();
        hasQuit = true;
    }
}
于 2014-12-18T06:54:15.337 に答える