Java 如何关闭Selenium中所有打开的驱动程序?
我需要关闭Selenium中所有打开的Chrome驱动程序。我所有的方法都只关闭其中一个。我需要同时关闭所有驱动程序的原因——在我的程序开始时,我不知道需要打开多少个驱动程序,所以我尝试在循环中打开几个具有相同驱动程序名称的驱动程序 我是如何打开这些驱动程序的:Java 如何关闭Selenium中所有打开的驱动程序?,java,selenium,phantomjs,selenium-chromedriver,Java,Selenium,Phantomjs,Selenium Chromedriver,我需要关闭Selenium中所有打开的Chrome驱动程序。我所有的方法都只关闭其中一个。我需要同时关闭所有驱动程序的原因——在我的程序开始时,我不知道需要打开多少个驱动程序,所以我尝试在循环中打开几个具有相同驱动程序名称的驱动程序 我是如何打开这些驱动程序的: WebDriver driver = new ChromeDriver(); driver.get(firstURL); driver = new ChromeDriver(); driver.get(secondURL); dri
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
我如何尝试关闭两个驱动程序:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
第一次尝试:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
第二次尝试:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
第三次尝试:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
第四次尝试:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
你是如何初始化你的驱动程序的。您是否初始化了多个驱动程序?如果是,则分别对所有驱动程序使用
quit()
方法。否则,只有driver.quit()
可以工作
编辑:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
在每次新分配之前使用
driver.quit()
。您是如何初始化驱动程序的。您是否初始化了多个驱动程序?如果是,则分别对所有驱动程序使用quit()
方法。否则,只有driver.quit()
可以工作
编辑:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
driver.quit();
在每次新分配之前使用
driver.quit()
。driver.quit()将关闭所有(父+子)浏览器窗口并结束整个会话。这应该可以正常工作。driver.quit()将关闭所有(父+子)浏览器窗口并结束整个会话。这应该可以正常工作。在您的代码中只有一个WebDriver驱动程序
,即使您为其分配了多个ChromeDriver()
对象。因此,您可以使用driver.close()
或driver.quit()关闭驱动程序一次代码>
并且只有最新的窗口将关闭所有以前的窗口仍将保留(现在无法再联系),因为唯一的驱动程序已关闭。在您的代码中只有一个WebDriver驱动程序
,即使您为其分配了多个ChromeDriver()
对象。因此,您可以使用driver.close()
或driver.quit()关闭驱动程序一次代码>
并且只有最新的窗口将关闭。由于唯一的驱动程序已关闭,所有以前的窗口仍将保留(现在无法再联系)。首先,让我们看看您的代码:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
以下是正在发生的事情:
您将打开一个新的Chrome实例
然后对该实例执行一些操作:导航到网站
下一步,有几件事正在发生:您打开一个新的Chrome实例,然后覆盖对您打开的前一个实例的引用。基本上,在这一点上,你失去了你刚刚打开的第一个浏览器的轨道李>
现在,您可以对第二个打开的实例执行一些操作:导航到网站
从你的问题来看,不清楚你到底想完成什么。您有几个选择:
在测试之前打开浏览器的一个实例。例如,如果您正在使用JUnit,这通常在@Before
方法中完成
在你的测试中做一些工作
测试结束后关闭浏览器。同样在JUnit中,这将在@After
方法中完成
另一种选择是,您可能合法地需要多个浏览器。您将需要跟踪所有这些问题
您可以创建驱动程序的列表
,每次打开新的驱动程序时,都将其添加到该列表中
在测试结束时,迭代该列表,并关闭所有测试
首先让我们看看您的代码:
WebDriver driver = new ChromeDriver();
driver.get(firstURL);
driver = new ChromeDriver();
driver.get(secondURL);
以下是正在发生的事情:
您将打开一个新的Chrome实例
然后对该实例执行一些操作:导航到网站
下一步,有几件事正在发生:您打开一个新的Chrome实例,然后覆盖对您打开的前一个实例的引用。基本上,在这一点上,你失去了你刚刚打开的第一个浏览器的轨道李>
现在,您可以对第二个打开的实例执行一些操作:导航到网站
从你的问题来看,不清楚你到底想完成什么。您有几个选择:
在测试之前打开浏览器的一个实例。例如,如果您正在使用JUnit,这通常在@Before
方法中完成
在你的测试中做一些工作
测试结束后关闭浏览器。同样在JUnit中,这将在@After
方法中完成
另一种选择是,您可能合法地需要多个浏览器。您将需要跟踪所有这些问题
您可以创建驱动程序的列表
,每次打开新的驱动程序时,都将其添加到该列表中
在测试结束时,迭代该列表,并关闭所有测试
我有几个建议给你
1:命名约定
在你的帖子中,你说:
“…在我的程序开始时,我不知道需要打开多少个驱动程序,所以我尝试在循环中打开几个具有相同驱动程序名称的驱动程序。”
这不是一个很好的方法,原因如下:假设您有两个WebDriver,每个名为“driverX”。您需要第一个驱动程序转到“”,并且需要第二个驱动程序转到“”。因此,您的代码如下所示:
driverX.get("www.google.com");
driverX.get("www.yahoo.com");
这就成了一个问题,因为你没有告诉第二个WebDriver去雅虎,而是将第一个WebDriver从谷歌重新路由到了雅虎
这个问题的解决办法是什么?使用唯一的名称命名每个Web驱动程序(例如,googleDriver
或yahooDriver
)。然后,您的代码将如下所示,您不应该有任何冲突:
googleDriver.get("www.google.com");
yahooDriver.get("www.yahoo.com");
2:WebDriver分组
现在我们有了每个具有唯一名称的WebDriver,我们可以单独引用它们。这很好,但是,有些应用程序要求我们同时引用其中的几个。这就是ArrayList的用武之地。在下面的代码中,我为我们