基本上有两种方法,取决于你的情况。
情况1:扩展WebDriver不是一个现实的选项。
这是最常见的情况。 在实际工作中使用Selenium的大多数开发人员都希望有一种方便的方式来告诉他们是否已经退出了WebDriver,而且试图重构框架以确保仅使用自定义的WebDriver扩展可能并不值得麻烦。
在这种情况下,Sajan的回答和Gili关于他的回答的建议将不会有用,因为覆盖RemoteWebDriver#stopClient()
不是一个选项。(此外,即使是选项,大多数人也在寻找简单的答案。)
只要您只使用随Selenium附带的标准WebDriver实现(FirefoxDriver、ChromeDriver、InternetExplorerDriver、SafariDriver等),您就可以将WebDriver强制转换为RemoteWebDriver,然后检查sessionId是否为null(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();
}
然后你可以像这样扩展标准的WebDrivers(在这个例子中是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;
}
}