Selenium Webdriver sessionId或检查是否关闭了所有浏览器窗口
是否有办法查看是否所有浏览器窗口都已关闭?我发现,如果在WebDriver上调用driver.quit()或driver.close(),sessionId将变为null。有办法检查吗 我不想给关闭或退出的驱动程序打电话,因为它会引发WebDriverException。因此,我想在继续之前检查浏览器的状态。刚刚设置好Selenium Webdriver sessionId或检查是否关闭了所有浏览器窗口,selenium,webdriver,Selenium,Webdriver,是否有办法查看是否所有浏览器窗口都已关闭?我发现,如果在WebDriver上调用driver.quit()或driver.close(),sessionId将变为null。有办法检查吗 我不想给关闭或退出的驱动程序打电话,因为它会引发WebDriverException。因此,我想在继续之前检查浏览器的状态。刚刚设置好 driver=null; 每次退出浏览器并检查 if (browser!=null){ //Attention: this comand is not supported
driver=null;
每次退出浏览器并检查
if (browser!=null){
//Attention: this comand is not supported
//as far as i know ;)
driver.doSomething();
}
或
或接收NullPointerException;) 我认为检测所有窗口是否关闭的最干净的方法是smth,如:
boolean allWindowsClosed = webDriver.getWindowHandles().isEmpty();
getWindowHandles为所有打开的窗口返回一组窗口句柄-请参见当浏览器窗口消失时实际调用getWindowHandles将引发“UnreachableBrowserException” 您必须将调用放入try-catch块并处理该错误。实际上,这是唯一已知的捕捉意外浏览器窗口关闭的工作方式。我在配置类中有一个静态方法来处理驱动程序:我像这样重新启动浏览器:
protected static void loadPages() {
if (driver == null || driver.toString().contains("null")) { //null refers to an missing session id
driver = new FirefoxDriver();
//load all my page objects like
loginpage = new LoginPage(driver);
//....
//....
}
try {
if (driver.getWindowHandles() == null || driver.getWindowHandles().isEmpty()){ //will cause an UnreachableBrowserException if the browser really is not avalable.
try { //you actually dont need this try catch block
driver.quit();
} catch (Exception e) {
System.err.println("Quitting levtover driver did not work.");
}
driver = null; //you have to set the driver to null
loadPages();
}
} catch (UnreachableBrowserException ube) {
driver = null; //like above set to null to make sure no driver left
}
}
现在,ofc您当前的测试将失败,但您将能够继续进行其余的测试
public bool InstanceExist
{
get
{
if (Instance != null)
{
try
{
return (Instance.WindowHandles != null); // allways returns true if browser instance exist or thrown error
}
catch (Exception e)
{
return false;
// means that browser was closed by user
}
}
return false; // means that it wasn't created yet or was closed by developer programmally
}
}
您需要检查3种情况:
public bool InstanceExist
{
get
{
if (Instance != null)
{
try
{
return (Instance.WindowHandles != null); // allways returns true if browser instance exist or thrown error
}
catch (Exception e)
{
return false;
// means that browser was closed by user
}
}
return false; // means that it wasn't created yet or was closed by developer programmally
}
}
public void BrowserCheck()
{
try
{
var h = webDriver.WindowHandles;
return; // no problem
}
catch // browser window is closed so re-init it
{
webDriver.Quit();
WebDriverInit(); // your init code
}
}