2016-09-30 83 views
0

下面的代码driver.quit()不会关闭所有浏览器窗口

WebDriver driver = new FirefoxDriver(); 
driver = new FirefoxDriver(); 

这打开两个Firefox窗口。 在@AfterMethod,我打电话

driver.quit(); 

在-尽管如此,第一个浏览器窗口不会关闭。我试图获得窗口句柄,但只返回一个窗口句柄。无论如何,我可以关闭两个窗户的窗户吗?

回答

1

你打算打开两个窗户?如果是这样,为每个窗口使用2个变量。或者,在创建新窗口之前关闭第一个窗口。

您正将一个变量分配给新的FireFox窗口。然后,将相同的变量分配给新窗口。你失去了与第一个窗口的连接,因为你将新窗口存储在变量中。

这会工作:

WebDriver driver = new FirefoxDriver(); 
WebDriver driver2 = new FirefoxDriver(); 
(...) 
driver.quit(); 
driver2.quit(); 

这将工作太:

WebDriver driver = new FirefoxDriver(); 
(...) 
driver.quit(); 
driver = new FirefoxDriver(); 
(...) 
driver.quit(); 
+0

感谢您的回复。是的我需要两个浏览器窗口,因为我正在测试一个功能,其中user1(browser1)锁定的对象被user2(browser2)访问,并且在对象被user1锁定时看到错误消息。我打开@BeforeMethod中的浏览器窗口,因此需要显式指定驱动程序名称(driver和driver2)。让我看看我是否可以相应地修改代码。 –

0

你正在创建一个浏览器的一个新实例并将其分配给前面的司机参考。因此,呼吁driver.quit()将关闭相关的第二个实例的所有窗口,但不是第one.To做到这一点,如果你需要这样您就可以实例化两个地方有两个webdriver的引用:

WebDriver driver1 = new FirefoxDriver(); 
WebDriver driver2= new FirefoxDriver(); 

&调用退出()方法有两个驱动因素:

driver1.quit(); 
driver2.quit(); 

但是如果你需要它的只有一个实例,然后重新分配避免。

+0

感谢您的回复。我想到两个驱动程序实例可能是这个可能的解决方案。但是,我在@BeforeMethod中使用了登录方法,因此我无法控制所创建的驱动程序实例的名称。让我看看我是否可以将它作为参数传递。 –

1

你从它,如果你想使用一个对象,如果它做一些处理,然后后打开两个不同的网页,将工作,在您的方案的情况下,打开浏览器的两倍,具有相同的对象,除了创建两个不同的对象,并逐一尝试退出它,它会起作用。