当前位置: 首页 > 知识库问答 >
问题:

driver.close测试不工作

朱浩大
2023-03-14

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

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

然后它不会关闭浏览器实例。请尝试以下两个代码段: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();
    }
}

它是一个bug在testNG。注意:driver.quit()正在工作,但我不能使用它,因为当我并行运行我的测试时,它会关闭所有仍在运行测试的浏览器实例。TIA!Selenium WebDriver版本: 2.33 TestNG: 6.8.5 Firefox版本: 22Java:1.7.0.40

共有3个答案

马哲
2023-03-14

这个变通方法很好,但是在座的任何人都可以解释为什么这个功能不起作用?我所有的@AfterSuite@BeforeSuite和@Test都在同一个类中。但仍然是司机。close不起作用,而driver。退出有效,但是司机。退出关闭所有浏览器,所以只想使用驱动程序。关闭,但不关闭浏览器。

严玉泽
2023-03-14

大家好,到现在为止,我已经找到了一个解决方法,可以关闭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。它会关闭浏览器。我希望这个解决方案能帮助其他面临类似问题的用户。

西门经国
2023-03-14

这不是TestNG中的错误。

如果说有什么不同的话,那就是硒中的一个错误。请记住,driver.close()将关闭活动窗口...这意味着如果一个测试有多个窗口打开,您将需要关闭所有窗口。

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

然而,如果你已经设法在一个驱动程序上有多个窗口运行不同的代码...那么我帮不了你,除了建议切换到多个实例(这要稳定得多)。

 类似资料:
  • 我有一个带有Java配置类的Spring(4.2.5)项目。这些在正常运行项目时起作用,但我无法使我的测试工作。在下面的测试中,为空。 如果添加注释,则会出现异常 其中和在和中定义,后者是基于活动配置文件选择的。 [编辑2] 经过更多的搜索,我发现了这个问题,并且在检查了我的依赖项之后,我发现我在maven依赖项下有Spring-Core-4.1.9,而且我没有在我的POM中包含一个依赖项。添加依

  • 我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎,并将包作为可执行的JAR文件。 我有一个控制器: 和另一个测试类。使用Spring的MockMVC框架进行测试。这在测试中驱动MVC应用程序,就好像它在容器中运行一样, 但我犯了一个错误:

  • db-config-test.xml Maven插件: StackError:

  • 我正在为我的应用程序编写单元测试,我在服务内部执行的步骤之一是从SpringSecurityContext获取当前经过身份验证的用户。 我知道,如果我想模拟Spring Security Authentication,我可以使用@SusMockUser,但它对我不起作用,因为当测试方法到达getAuthentication()方法调用时,它总是返回null... 我已经搜索了很多问题和博客帖子,但

  • 我正在使用和我的应用程序。到目前为止,一切正常,但在将来测试一个排定的作业时,比方说一个月后,我会排定一个作业,然后将我的机器的系统时间更改为当天,在触发器触发前5分钟。我等着,扳机开火时间来了又去,但没有开火。我能够测试的另一种方法是更改oracle表中的fire时间,这样我们就不需要更改系统时间。当我把第二天的工作安排在4点的时候(不需要改变任何日期,但我等了24小时才开始工作),它也起作用了

  • 我正在使用Qt/openGL,激活深度缓冲区时遇到了一些问题。 在每一帧,我激活以下状态:glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); 另外,我检查了我的深度缓冲区的大小不是空的(glGetIntegerv(GL_DEPTH_BITS)给我24,这是预期的值),但是深度测试不起作用,一些应该通过深度测试丢弃的片段不起作用。 知道吗?