无法使用driver.quit关闭不同浏览器的实例

时间:2014-12-09 14:57:38

标签: java selenium quit

我已经打开了不同的浏览器实例,最后我想关闭所有实例,但是当我使用driver.close()或driver.quit()时,它只关闭浏览器的最后一个实例。请帮忙。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;


public class showClose {

static WebDriver driver;

public showClose(WebDriver driver){
    this.driver=driver;
}

public static void main(String[] args) {

    showClose sc = new showClose(driver);
    sc.IE("http://www.msn.com");
    sc.Firefox("http://seleniumhq.org");
    sc.Chrome("http://google.com");

    driver.quit();

}

//Internet Explorer driver
public void IE(String URL){
    //Set the driver property for IE
    System.setProperty("webdriver.ie.driver",                 System.getProperty("user.dir")+"\\IEDriverServer.exe");

    DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();  
    ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);

    //Create object of Internet explorer driver
    driver = new InternetExplorerDriver(ieCapabilities);
    driver.get(URL);
}

//Firefox driver
public void Firefox(String URL){
    driver = new FirefoxDriver();
    driver.get(URL);
}

//Chrome driver
public void Chrome(String URL){
    System.setProperty("webdriver.chrome.driver",      System.getProperty("user.dir")+"\\chromedriver.exe");

    driver = new ChromeDriver();
    driver.get(URL);

}
}

3 个答案:

答案 0 :(得分:2)

在每次调用“sc.IE”,“sc.Firefox”或“sc.Chrome”时,您将覆盖实例变量“driver”。 所以你的电话“driver.quit”关闭的唯一驱动程序是最后一个。 如果要在访问URL后关闭浏览器,则必须在每次调用“sc.IE”,“sc.Firefox”或“sc.Chrome”之前执行“driver.quit”或管理列表WebDrivers并关闭所有这些。 例如,您可以这样做:

import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class ShowClose {

private List<WebDriver> drivers;

public ShowClose(){
    this.drivers = new ArrayList<WebDriver>();
}

public static void main(String[] args) {

    ShowClose sc = new ShowClose();
    sc.IE("http://www.msn.com");
    sc.Firefox("http://seleniumhq.org");
    sc.Chrome("http://google.com");

    sc.CloseAll();
}

public void CloseAll() {
    for(WebDriver d : drivers) {
        d.quit();
    }
}

//Internet Explorer driver
public void IE(String URL){
    //Set the driver property for IE
    System.setProperty("webdriver.ie.driver", System.getProperty("user.dir")+"\\IEDriverServer.exe");

    DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();  
    ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);

    //Create object of Internet explorer driver
    WebDriver driver = new InternetExplorerDriver(ieCapabilities);
    driver.get(URL);
    this.drivers.add(driver);
}

//Firefox driver
public void Firefox(String URL){
    WebDriver driver = new FirefoxDriver();
    driver.get(URL);
    this.drivers.add(driver);
}

//Chrome driver
public void Chrome(String URL){
    System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"\\chromedriver.exe");

    WebDriver driver = new ChromeDriver();
    driver.get(URL);
    this.drivers.add(driver);
}

}

答案 1 :(得分:1)

<强>步骤1:

在Main Class中声明'List list'接口并将其声明为'Static'

public static  List<WebDriver> drivers;

使用列表的原因:它表示对象的有序列表,这意味着您可以按特定顺序访问列表的元素,也可以通过索引访问。您还可以多次向List添加相同的元素。

<强>步骤2: 现在创建一个构造函数,我们将从存储的驱动程序列表中指出当前的驱动程序。 (我假设我的班级名称为Test

public Test()

{
this.drivers = new ArrayList<WebDriver>();
}

第3步:

在IE,Firefox和Chrome的所有方法中为驱动程序添加一个WebDriver实例到ArrayList。

this.drivers.add(driver);

Step4:在主类中,将存储的驱动程序的所有实例复制到对象,并使用该对象关闭所有打开的实例。

for(WebDriver d : drivers)
{
d.quit();
}

答案 2 :(得分:-3)

首先,如果要关闭所有窗口,应使用driver.quit()driver.close()用于单个窗口。 也许它与浏览器窗口试图关闭时发出警报有关?

See this other topic on StackOverflow for a solution to that problem