我已经打开了不同的浏览器实例,最后我想关闭所有实例,但是当我使用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);
}
}
答案 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