driver.close在testng中没有工作

时间:2013-09-29 12:48:52

标签: java selenium selenium-webdriver testng

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

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

然后它没有关闭浏览器实例。 请尝试以下2个代码段: TestNGSnippet:

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();
  }
}

Plain Snippet:

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()正在工作,但我无法使用它,因为当我并行运行我的测试时,它将关闭所有仍在运行测试的浏览器实例。 TIA! Selenium WebDriver版本:2.33 TestNG:6.8.5 Firefox版本:22 Java:1.7.0.40

4 个答案:

答案 0 :(得分:2)

不是 TestNG中的错误。

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

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

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

答案 1 :(得分: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尝试相同的驱动程序实例时。它关闭了浏览器。我希望这种解决方法能够帮助面临类似问题的其他用户。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

Driver.close,有时您导航到新页面时无法正常工作。

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