2014-12-09 6 views
0

다른 브라우저 인스턴스를 열었습니다. 결국 모든 인스턴스를 닫고 싶지만 driver.close() 또는 driver.quit()를 사용하면 인스턴스가 닫힙니다. 브라우저의 마지막 인스턴스 만 닫습니다. 도와주세요.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); 

} 
} 

답변

1

1 단계 : 예를 들어 이런 식으로 뭔가를 할 수 메인 클래스에서

은 '목록 목록'인터페이스를 선언하고 '정적'로 선언

public static List<WebDriver> drivers; 

목록 사용 이유 : 이것은 오드를 나타냅니다. 빨간색의 개체 목록, 즉 특정 순서로 목록의 요소에 액세스 할 수 있음을 의미하는 인덱스와 색인으로도 액세스 할 수 있습니다. 동일한 요소를 두 번 이상 List에 추가 할 수도 있습니다.

2 단계 : 이제 저장된 드라이버 목록에서 현재 드라이버를 가리키는 생성자를 만듭니다. (내가 테스트로 내 클래스 이름을 가정)

public Test() 

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

3 단계 :

는 IE, 파이어 폭스와 크롬의 모든 메소드에 드라이버에 대한 WebDriver 인스턴스 밖으로 ArrayList에 추가합니다.

this.drivers.add(driver); 

4 단계 : 메인 클래스에서이 모든 인스턴스를 열었다 닫 객체 객체 및 사용에 저장된 드라이버의 모든 인스턴스를 복사합니다.

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

모든 창을 닫으려면 driver.quit()을 사용해야합니다. driver.close()은 단일 창입니다. 아마도 브라우저 창을 닫을 때 경고창이 울리는 것과 관련이 있습니까? "sc.IE", "sc.Firefox"또는 "sc.Chrome"당신이 덮어 쓰는 인스턴스 변수 "드라이버"의 모든 호출에서

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

2

. "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); 
} 

}