根据您的情况,您基本上可以采取两种方法。
情况 1:扩展 WebDriver 不是一个现实的选择。
这是最常见的情况。 大多数在实际工作环境中使用 Selenium 的开发人员想要一种方便的方式来判断 WebDriver 是否已退出,他们都在已经建立的测试框架中工作,并尝试重构框架以确保仅使用您的 WebDriver 的自定义扩展。麻烦多于其价值。
在这种情况下,Sajan 的答案和 Gili 对他的答案的推荐将没有用,因为覆盖 RemoteWebDriver#stopClient()
不是一种选择。(此外,即使是这样,大多数人都在寻找一个简单的答案。)
只要您只使用 Selenium 附带的 WebDriver 的标准实现(FirefoxDriver、ChromeDriver、InternetExplorerDriver、SafariDriver 等),您就可以将 WebDriver 转换为 RemoteWebDriver,然后检查 sessionId 是否为空(Pat 在右边跟踪,但直接调用 sessionId 比使用toString()
) 更好。
public static boolean hasQuit(WebDriver driver) {
return ((RemoteWebDriver)driver).getSessionId() == null;
}
这个答案应该适用于所有情况的 95%,因为您打算多久使用一次不实现 RemoteWebDriver 的 WebDriver?(不经常。)
情况 2:您可以实际扩展您的 WebDriver 。
这种情况不太常见,但也许您是:
(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;
}
}