在我的批处理执行中,多个标签的多个浏览器正在为第一个场景打开。我想在开始第二个场景之前关闭所有这些浏览器。
Driver.close()
正在关闭浏览器的一个标签页。
Driver.quit()
正在关闭所有浏览器并结束WebDriver
会话。所以,我无法运行批处理执行。请为此提供解决方案。
答案 0 :(得分:31)
您应该了解driver.close()
和driver.quit()
driver.close()
和driver.quit()
是在Selenium WebDriver
中关闭浏览器会话的两种不同方法。了解它们并了解何时使用哪种方法对于测试执行非常重要。
driver.close()
- 关闭焦点所在的浏览器窗口 集。
driver.quit()
- 它基本上调用了driver.dispose方法 关闭所有浏览器窗口并结束WebDriver会话 正常。
只要您想结束该程序,就应该使用driver.quit()
。它将关闭所有打开的浏览器窗口并终止WebDriver会话。如果在程序结束时不使用driver.quit,则WebDriver会话将无法正常关闭,文件也不会从内存中清除。这可能会导致内存泄漏错误。
在您的情况下,您必须使用driver.close()
来关闭当前窗口并保持驱动程序处于活动状态。
添加 - 如果只打开浏览器窗口并使用driver.close()
,它将退出webdriver会话。 webdriver不会保持活动状态。
答案 1 :(得分:2)
以下说明应解释WebDriver中 driver.close 和 driver.quit 方法之间的区别。我希望你觉得它很有用。
driver.close 和driver.quit是在Selenium WebDriver中关闭浏览器会话的两种不同方法。了解它们并了解何时使用每种方法对于测试执行非常重要。因此,我试图阐明这两种方法。
driver.close - 此方法关闭设置焦点的浏览器窗口。
driver.quit - 此方法基本上调用driver.dispose一个现在的内部方法,该方法依次关闭所有浏览器窗口并正常结束WebDriver会话。
driver.dispose - 如前所述,是WebDriver的内部方法,已根据另一个答案静默删除 - 需要验证。这种方法在正常的测试工作流程中确实没有用例,因为以前的方法都适用于大多数用例。
说明用例:只要您想结束程序,就应该使用 driver.quit 。它将关闭所有打开的浏览器窗口并终止WebDriver会话。如果在程序结束时不使用driver.quit,则WebDriver会话将无法正常关闭,并且不会从内存中清除文件。这可能会导致内存泄漏错误。
............
现在在这种情况下你需要特定的浏览器。 下面的代码将关闭除主窗口之外的所有子窗口。
String homeWindow = driver.getWindowHandle();
Set<String> allWindows = driver.getWindowHandles();
//Use Iterator to iterate over windows
Iterator<String> windowIterator = allWindows.iterator();
//Verify next window is available
while(windowIterator.hasNext())
{
//Store the Recruiter window id
String childWindow = windowIterator.next();
}
//Here we will compare if parent window is not equal to child window
if (homeWindow.equals(childWindow))
{
driver.switchTo().window(childWindow);
driver.close();
}
现在,您需要根据需要修改或添加条件
if (homeWindow.equals(childWindow))
{
driver.switchTo().window(childWindow);
driver.close();
}
目前只检查主窗口是否等于子窗口。在这里,您需要指定要关闭哪个ID的条件。我从未尝试过,所以只是建议你达到要求的方式。
答案 2 :(得分:1)
此代码关闭所有打开的窗口,然后将控制权返回到主窗口。
public static void switchTab() {
try {
Set<String> windows = webDriver.getWindowHandles();
Iterator<String> iter = windows.iterator();
String[] winNames=new String[windows.size()];
int i=0;
while (iter.hasNext()) {
winNames[i]=iter.next();
i++;
}
if(winNames.length > 1) {
for(i = winNames.length; i > 1; i--) {
webDriver.switchTo().window(winNames[i - 1]);
webDriver.close();
}
}
webDriver.switchTo().window(winNames[0]);
}
catch(Exception e){
e.printStackTrace();
}
}