0

嗨,当我通过计划 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();
  }
}

普通片段:

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 TestNG:6.8.5 Firefox 版本:22 Java:1.7.0.40

4

4 回答 4

2

不是TestNG 中的错误。

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

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

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

于 2013-09-29T13:44:15.113 回答
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 的相同驱动程序实例时。它关闭了浏览器。我希望此解决方法对面临类似问题的其他用户有所帮助。

于 2013-10-11T04:10:09.517 回答
0

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

于 2014-08-03T08:30:08.130 回答
0

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

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

于 2015-03-26T11:26:35.707 回答