【问题标题】:driver.close not working in testngdriver.close 在 testng 中不起作用
【发布时间】:2013-09-29 12:48:52
【问题描述】:

您好,当我通过计划 java 代码运行测试并使用 WebDriver 的 close() 方法时,它正在关闭相应的浏览器实例。但是当我在任何 @After 注释内的 testNG 类中使用 driver.close() 时,例如

@AfterClass
public void logout()
{
driver.findElement(By.id(someSignOutId)).click();
driver.close();
}

那么它不会关闭浏览器实例。 请尝试以下 2 个代码 sn-ps : 测试NGSnippet:

package unitTest.myTest;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class GoogleTestNGTest {
  @Test
  public void f() throws InterruptedException 
  {
      WebDriver driver=new FirefoxDriver();
        driver.get("http://www.google.com");
        Thread.sleep(2000);
        driver.close();
  }
}

普通代码段:

package unitTest.myTest;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class GoogleTest 
{
    public static void main(String[] args) throws InterruptedException 
    {
        WebDriver driver=new FirefoxDriver();
        driver.get("http://www.google.com");
        Thread.sleep(2000);
        driver.close();
    }
}

这是 testNG 中的一个错误。注意: driver.quit() 正在工作,但我不能使用它,因为当我并行运行测试时,它将关闭我所有仍在运行测试的浏览器实例。蒂亚! Selenium WebDriver 版本:2.33 测试NG:6.8.5 火狐版本:22 Java : 1.7.0.40

【问题讨论】:

  • Mrunal 如果有任何错误,请添加堆栈跟踪。另外,您是在使用 afterclass 以及 @Test 还是仅使用 @Test?
  • 您的问题是您的@Afterclass 不在您的班级(或在测试类扩展的班级)中。
  • 您好,您可以简单地复制粘贴我上面的代码 sn-ps 并在您身边尝试,您就会知道我的问题。

标签: java selenium selenium-webdriver testng


【解决方案1】:

不是 TestNG 中的错误。

如果有的话,那是 Selenium 中的一个错误。请记住,driver.close() 将关闭活动窗口...这意味着如果测试打开了多个窗口,则需要关闭所有窗口。

您说您正在并行运行多个测试...我希望您使用多个驱动程序实例....并非所有它们都在同一个驱动程序上运行。如果是这种情况,那么您可以调用driver.quit(),因为它只会退出当前实例。

但是,如果您设法在一个驱动程序上拥有多个运行不同代码的窗口...那么我无法帮助您,除了建议切换到多个实例(这样更稳定)。

【讨论】:

  • 我在多个驱动程序实例上运行,而不是在同一个实例上。需要注意的一件事是,当我在单个纯 java 文件中使用 driver.close() 时,它能够关闭浏览器,但是当我在 testNG 中使用它时,它并没有关闭。这是我的担心。
  • 然后使用driver.quit(); 如果它没有达到预期的效果,那么看看你的代码。 TestNG 对 webdriver 执行nothing。它是完全独立的。
  • driver.close 正在关闭窗口这一事实意味着它也不是 selenium 的错误。使用它的代码有问题。
  • @niharika_neo 我同意你的观点,硒没有问题,但 testNG 可能有问题。试试我上面的两个代码 sn-ps,你可以重新创建问题。
  • Mrunal,如果那是您的代码...那么它很简单。 @Afterclass 方法不在类中。
【解决方案2】:

大家好,到目前为止,我已经找到了一种解决方法,可以从 testNG 中关闭驱动程序。请参阅下面我的解决方法:

package unitTest.myTest;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;

public class GoogleTestNGTest {
  @Test
  public void f() throws InterruptedException 
  {
      WebDriver driver=new FirefoxDriver();
        driver.get("http://www.googl.com");
        Thread.sleep(2000);
        driver.close();
try
{
driver.get("someURL");
}
catch(UnreachableBrowserException e){}
}

我发现浏览器会话已经过期。但只是浏览器窗口没有关闭。因此,当我们再次尝试使用带有一些 url 的相同驱动程序实例时。它关闭了浏览器。我希望此解决方法对面临类似问题的其他用户有所帮助。

【讨论】:

    【解决方案3】:

    这个解决方法很好,但是这里的任何人都可以解释为什么这个功能不起作用?我所有的@AfterSuite @BeforeSuite 和@Test 都在同一个班级。但是 driver.close 仍然不起作用,而 driver.quit 起作用,但是 driver.quit 关闭了所有浏览器,因此只想使用不会关闭浏览器的 driver.close。

    【讨论】:

    • 首先这不是一个答案,所以如果你想在评论部分发表评论。我想知道您使用的是哪个版本的硒?我相信这在最新的 selenium 版本中现在不是问题。
    • @Mrunal,我无法在评论部分发帖,所以在回答部分输入了我的输入。对于您的问题,我使用的是 2.42 和 FF 31。
    • 我已经尝试使用 2.42.2 和 FF 28,它现在正在工作。你也试着告诉我。
    【解决方案4】:

    Driver.close,有时一导航到新页面就不起作用。

    所以解决方案是等待页面加载(使用 Thread.sleep )或增加默认超时。 之后尝试driver.close(),它将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多