我需要关闭Selenium中所有打开的Chrome驱动程序。我所有的方法只关闭其中一个。我需要同时关闭所有驱动程序的原因 - 在我的程序开始时我不知道需要打开多少驱动程序,因此我尝试在循环中打开一些具有相同驱动程序名称的驱动程序。
我如何打开这些驱动程序:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
我是如何尝试关闭这两个驱动程序的:
首先尝试:
driver.close();
第二次尝试:
driver.quit();
第三次尝试:
driver.close();
driver.close();
第四次尝试:
driver.quit();
driver.quit();
答案 0 :(得分:1)
您的代码中只有一个WebDriver driver
,即使您为其分配了多个ChromeDriver()
个对象。因此,您只需使用driver.close()
或driver.quit();
并且只有最新的窗口将被关闭所有以前的窗口仍将保留(现在无法再联系),因为唯一的驱动程序已关闭。
答案 1 :(得分:0)
您是如何初始化驱动程序的?你初始化了多个驱动程序吗?如果是,则分别对所有驱动程序使用quit()
方法。否则,只有driver.quit()
才有效。
修改强>
在每次新作业之前使用driver.quit()
。
答案 2 :(得分:0)
driver.quit()将关闭所有(父+子)浏览器窗口并结束整个会话。这应该可以正常工作。
答案 3 :(得分:0)
首先让我们看看你的代码:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
以下是发生的事情:
从你的问题来看,目前尚不清楚你究竟想要完成什么。您有几种选择:
@Before
方法中完成。@After
方法中完成。另一种选择是您可能合法地需要多个浏览器。你需要跟踪所有这些。
List
drivers
,每次打开新的TextView[] textView = new TextView[3];
for (int cell = 0; cell < 3; cell++){
textView[cell].setText("-");
}
时,都会将其添加到该列表中。答案 4 :(得分:0)
我有几个建议给你。
在你的帖子中,你说:
“...在程序开始时我不知道需要打开多少驱动程序,因此我尝试在循环中打开一些驱动程序名称相同的驱动程序。”
这不是一个非常好的方法,这就是为什么:假设您有两个WebDrivers,每个都名为“driverX”。您需要第一个驱动程序转到“www.google.com”,您需要第二个驱动程序转到“www.yahoo.com”。因此,您的代码如下所示:
driverX.get("www.google.com");
driverX.get("www.yahoo.com");
这成为一个问题,因为您实际上已经将第一个WebDriver从Google重新路由到雅虎,而不是告诉第二个WebDriver转到Yahoo.
这个问题的解决方案是什么?使用唯一名称(例如googleDriver
或yahooDriver
)为每个WebDriver命名。然后,您的代码将如下所示,您不应该有任何冲突:
googleDriver.get("www.google.com");
yahooDriver.get("www.yahoo.com");
现在我们已经为每个WebDriver创建了一个唯一的名称,我们可以单独引用它们。这很好,但是,有些应用程序要求我们一次引用其中的几个。这是ArrayLists可以进入的地方。在下面的代码中,我使用ArrayList来解决您的原始问题。
ArrayList<WebDriver> activeDrivers = new ArrayList<>();
activeDrivers.add(googleDriver);
activeDrivers.add(yahooDriver);
for(WebDriver driver : activeDrivers){
if(driver.getCurrentUrl().equals("Some predefined exit page"){
driver.quit();
}
}
如果您仍然不理解或有任何疑问,请随时发表评论。
答案 5 :(得分:0)
@AfterMethod
public void tearDown(){
// Your Code
// At the End call
driver.close();
}
答案 6 :(得分:-1)
要扩展Zachary的答案,假设您在测试环境中重新使用驱动程序, 你可以: