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

driver.quit()在具有多个StepDefinition文件的Cucumber中不起作用-selenium-java

华峰
2023-03-14
  java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.quit()" because "driver" is null

我知道驱动程序实例不会传递给StepDefinition1文件中的@after方法

是否有人拥有多个StepDefinition文件的相同框架组合,如果有,如何使用@after退出浏览器的每个实例?

    @After
    public void after() {
        driver.quit();
    }

上述常用方法在StepDefinition1中,涉及StepDefinition2的测试失败

共有1个答案

邹京
2023-03-14

您应该在基类中将driver作为公共变量,并且使它是线程安全的。甚至连报表线程都要安全

public static ThreadLocal<WebDriver> driver = new ThreadLocal<WebDriver>();
driver.set(driver)

现在将driver更改为driver.get()处处示例

driver.findElement changes to driver.get().findElement()

driver.get changes to driver.get().get()

否则,并行运行的规范将尝试访问同一个对象,当第一个线程使用driver.quit()关闭驱动程序时,剩余的线程尝试访问关闭的驱动程序,您将得到错误。

 类似资料:
  • 因此,我一直很难通过Cucumber/Scala集成来降低依赖关系。我终于有了一个简单的步骤定义运行,但当我按control+空格键时,步骤定义列表不会显示在我的功能文件中。但是,当我运行特性文件时,它运行成功。 测试转轮 步骤定义文件 以下是一些与Cucumber/Scala相关的依赖关系

  • 有人能解释一下这是怎么回事吗?非常感谢任何帮助!

  • 我在nodejs中有一个查询,如下所示。但它不返回任何值。有什么办法解决这个问题吗?

  • 我正在一起使用Cucumber-JVM和Selenium WebDriver。我在eclipse中有一个Maven项目,pom.xml文件的依赖关系如下所示:

  • 以下cypress命令在Mac中的工作:- 但对于Windows10来说,上述做法就行不通了。我必须删除引号,以便让它工作。npx cypress-tags run-e tags=@TC1 但是现在删除引号后,我将不能传递多个标记。我已经尝试了以下所有方法,但到目前为止,在Windows10中没有任何一种方法适用于多个标签。 windows 10尝试的解决方案:-

  • 我还是Selenium测试世界的新手,目前正在使用SeleniumChromeWebDriver进行测试。 我想做的是在下面的弹出对话框中: < li >在文本输入框中输入一个数字 < li >单击应用按钮 < li >然后将触发web应用程序向服务器端发布信息。 这是我到目前为止发现的,如果我取消对<code>线程的注释。睡眠(500),一切都将完美工作。但是没有<code>线程。sleep(5