Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何关闭Selenium中所有打开的驱动程序?_Java_Selenium_Phantomjs_Selenium Chromedriver - Fatal编程技术网

Java 如何关闭Selenium中所有打开的驱动程序?

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

我需要关闭Selenium中所有打开的Chrome驱动程序。我所有的方法都只关闭其中一个。我需要同时关闭所有驱动程序的原因——在我的程序开始时,我不知道需要打开多少个驱动程序,所以我尝试在循环中打开几个具有相同驱动程序名称的驱动程序

我是如何打开这些驱动程序的:

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的用武之地。在下面的代码中,我为我们