Невозможно закрыть экземпляры другого браузера с помощью driver.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);

}
}

person Prasad    schedule 09.12.2014    source источник


Ответы (3)


Шаг 1:

В основном классе объявите интерфейс «Список списка» и объявите его как «Статический».

public static  List<WebDriver> drivers;

Причина использования списка: он представляет собой упорядоченный список объектов, что означает, что вы можете получить доступ к элементам списка в определенном порядке, а также по индексу. Вы также можете добавить один и тот же элемент в список более одного раза.

Шаг 2. Теперь создайте конструктор, в котором мы укажем текущий драйвер из сохраненного списка драйверов. (Я предполагаю, что мой класс называется Test)

public Test()

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

Шаг 3.

Добавьте экземпляр WebDriver в список ArrayList для драйверов во всех методах IE, Firefox и Chrome.

this.drivers.add(driver);

Шаг 4. В основном классе скопируйте все экземпляры сохраненных драйверов в объект и используйте этот объект, чтобы закрыть все открытые экземпляры.

for(WebDriver d : drivers)
{
d.quit();
}
person Rupesh Shinde    schedule 10.12.2014

При каждом вызове «sc.IE», «sc.Firefox» или «sc.Chrome» вы перезаписываете переменную экземпляра «драйвер». Таким образом, единственный драйвер, который закрывается вашим вызовом «driver.quit», — это последний. Если вы хотите закрыть браузер после посещения URL-адреса, вам нужно либо выполнить «driver.quit» перед каждым вызовом «sc.IE», «sc.Firefox» или «sc.Chrome», либо управлять списком 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);
}

}

person Stefan    schedule 09.12.2014

С одной стороны: driver.quit() следует использовать, если вы хотите закрыть все окна. driver.close() для одного окна. Возможно, это как-то связано с тем, что окна браузера выдают предупреждение при попытке закрыться?

Решение этой проблемы см. в другом разделе StackOverflow

person Michael    schedule 09.12.2014