ページオブジェクトのコレクションをチェックして、それぞれについて、WebDriverでquit()が呼び出されているかどうかを確認する必要があります。
WebDriverの状態を確認する次のメソッドを作成しました。
public static boolean hasQuit(WebDriver driver) {
try {
driver.getTitle();
return false;
} catch (SessionNotFoundException e) {
return true;
}
}
問題は次のとおりです。ブール値の真理を発見するために例外をスローしてキャッチする必要はありませんが、 WebDriver API ドライバーが終了したかどうかを確認する方法を提供しません。
だから私の質問は、 webDriverが終了したかどうかを確認するより良い方法はありますか?
同様の(より一般的な)質問を見つけました ここ、しかし、質問には試されたコードはなく、唯一の答えは、終了後に常にWebDriverをnullに設定することでした(私は必ずしも制御できません)。
quit()
が呼び出された場合、driver.toString()
はnullを返します。
>>> FirefoxDriver: firefox on XP (null))
それ以外の場合は、オブジェクトのハッシュコードを返します。
>>> FirefoxDriver: firefox on XP (9f897f52-3a13-40d4-800b-7dec26a0c84d)
したがって、ブール値を割り当てるときにnullをチェックできます。
boolean hasQuit = driver.toString().contains("(null)");
これが最も一般的な状況です。 WebDriverが終了したかどうかを確認する便利な方法を必要とする実際の状況でSeleniumを操作するほとんどの開発者は、既に確立されたテストフレームワークで作業し、 WebDriversのカスタム拡張のみが使用されることを保証するフレームワークは、おそらくそれが価値があるよりも厄介です。
この場合、RemoteWebDriver#stopClient()
のオーバーライドはオプションではないため、Sajanの回答とGiliの彼の回答の推奨は役に立ちません。 (それがあったとしても、ほとんどの人は簡単な答えを探しています。)
Seleniumに付属するWebDriverの標準実装(FirefoxDriver、ChromeDriver、InternetExplorerDriver、SafariDriverなど)のみを使用している限り、WebDriverをRemoteWebDriverにキャストして、sessionIdがnull(Patが右側にあるかどうか)を確認できます。追跡しますが、toString()
)を使用するよりもsessionIdを直接呼び出す方が適切です。
public static boolean hasQuit(WebDriver driver) {
return ((RemoteWebDriver)driver).getSessionId() == null;
}
RemoteWebDriverを実装していないWebDriverをどのくらいの頻度で使用するのか、この回答はすべてのケースの95%に適しているはずです。 (それほど頻繁ではありません。)
この状況はあまり一般的ではありませんしかし、おそらくあなたは次のいずれかです:
(a)適切に設計され抽象化されたフレームワークを使用する、または
(b)Seleniumテストフレームワークをゼロから開始する。
この場合、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;
}
}
StopClient メソッドはquit
( RemoteWebDriver Source )が呼び出された後に呼び出されます。RemoteWebDriver
のインスタンスをサブクラス化し、stopClient
メソッドをオーバーライドし、フラグを設定してフラグをチェックできますWebdriverが閉じているかどうかを判断する(quit
)。