CumberJava-Hook类-Quit驱动程序方法不工作

CumberJava-Hook类-Quit驱动程序方法不工作,java,cucumber,hook,pom.xml,Java,Cucumber,Hook,Pom.xml,我是Cucumber方面的新手,我正在尝试实现一个钩子类。。。长话短说:司机。退出;方法不起作用 这是我的钩子课: import cl.xxx.util.init.Initializer; import cucumber.api.Scenario; import cucumber.api.java.After; import cucumber.api.java.Before; import org.openqa.selenium.WebDriver; public class Service

我是Cucumber方面的新手,我正在尝试实现一个钩子类。。。长话短说:司机。退出;方法不起作用

这是我的钩子课:

import cl.xxx.util.init.Initializer;
import cucumber.api.Scenario;
import cucumber.api.java.After;
import cucumber.api.java.Before;
import org.openqa.selenium.WebDriver;


public class ServiceHooks {

    protected WebDriver driver;

    @Before
    public void initializeTest()throws Exception{
        // Code to setup initial configurations
        Initializer.getInstance().init();
    }

    @After
    public void embedScreenshot(Scenario scenario) {
        if (scenario.isFailed()) {
            try {
                System.out.println("Test finished with error");
                 driver.quit();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
当场景步骤中出现问题时,控制台显示消息Test finished with error,但未关闭驱动程序

以下是我的POM依赖项:

<dependencies>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java8</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-jvm-deps</artifactId>
            <version>1.0.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>1.2.5</version>
            <scope>compile</scope>
            <exclusions>

            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.8</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.masterthought</groupId>
            <artifactId>cucumber-reporting</artifactId>
            <version>3.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>3.4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-ie-driver</artifactId>
            <version>3.4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>3.4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.github.stephenc.monte</groupId>
            <artifactId>monte-screen-recorder</artifactId>
            <version>0.7.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.16</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>21.0</version>
        </dependency>
        <dependency>
            <groupId>net.masterthought</groupId>
            <artifactId>cucumber-sandwich</artifactId>
            <version>0.0.4</version>
        </dependency>
        <dependency>
            <groupId>com.github.mkolisnyk</groupId>
            <artifactId>cucumber-runner</artifactId>
            <version>1.0.10</version>
        </dependency>
        <dependency>
            <groupId>com.github.mkolisnyk</groupId>
            <artifactId>cucumber-reports</artifactId>
            <version>1.3.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-html</artifactId>
            <version>0.2.3</version>
        </dependency>
    </dependencies>

假设文件结构如下

src/test/java/TestRunner.java
src/test/java/stepdefs/ServiceHooks.java
src/test/java/stepdefs/StepDefinitions.java
src/test/resource/features/demo.feature
pom.xml
并使用pom.xml和TestRunner以及以下内容

演示功能

StepDefinitions.java

ServiceHooks.java-只添加了一些日志记录

package stepdefs;

import cucumber.api.Scenario;
import cucumber.api.java.After;
import cucumber.api.java.Before;

public class ServiceHooks {

//    protected WebDriver driver;

    @Before
    public void initializeTest()throws Exception{
//        Initializer.getInstance().init();
        System.out.println("Before hook");
    }

    @After
    public void embedScreenshot(Scenario scenario) {
        System.out.println("After hook");
        if (scenario.isFailed()) {
//            try {
//                System.out.println("Test finished with error");
//                driver.quit();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
            System.out.println("action for failed scenario ...");
        }
    }
}
使用mvn测试运行测试将产生以下输出

Running TestRunner
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@532760d8
Feature: Test Before and After hook
Before hook
a successfull step
After hook
Before hook

  Scenario: Test hooks for a non failing scenario # demo.feature:3
    Given a successfull step                      # StepDefinitions.aSuccessfullStep()
a not successfull step
After hook
action for failed scenario ...

  Scenario: Test hooks for a failing scenario # demo.feature:6
    Given a not successfull step              # StepDefinitions.aNotSuccessfullStep()
      java.lang.AssertionError: null
        at org.testng.Assert.fail(Assert.java:94)
        at org.testng.Assert.fail(Assert.java:101)
        at stepdefs.StepDefinitions.aNotSuccessfullStep(StepDefinitions.java:22)
        at ✽.Given a not successfull step(demo.feature:7)


Failed scenarios:
demo.feature:6 # Scenario: Test hooks for a failing scenario

2 Scenarios (1 failed, 1 passed)
2 Steps (1 failed, 1 passed)
0m0.098s

java.lang.AssertionError: null
    at org.testng.Assert.fail(Assert.java:94)
    at org.testng.Assert.fail(Assert.java:101)
    at stepdefs.StepDefinitions.aNotSuccessfullStep(StepDefinitions.java:22)
    at ✽.Given a not successfull step(demo.feature:7)

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.78 sec <<< FAILURE!
feature(TestRunner)  Time elapsed: 0.15 sec  <<< FAILURE!
cucumber.runtime.CucumberException: java.lang.AssertionError: null
    at cucumber.api.testng.TestNGCucumberRunner.runCucumber(TestNGCucumberRunner.java:69)
    at TestRunner.feature(TestRunner.java:48)
Caused by: java.lang.AssertionError: null
    at org.testng.Assert.fail(Assert.java:94)
    at org.testng.Assert.fail(Assert.java:101)
    at stepdefs.StepDefinitions.aNotSuccessfullStep(StepDefinitions.java:22)
    at ✽.Given a not successfull step(demo.feature:7)


Results :

Failed tests:   feature(TestRunner): java.lang.AssertionError: null

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
对于这两个执行的场景,您可以在钩子后找到字符串,对于失败的场景,还可以找到失败场景的操作


这意味着问题最有可能出现在您的另一段代码中。

在何处/如何初始化驱动程序并将其分配给驱动程序属性?测试完成后,日志/控制台中是否有错误消息?谢谢。当测试错误完成时,浏览器不会关闭。可能SeviceHooks类不在上。我添加了runner。ServiceHooks位于粘合路径中。ServiceHooks类必须位于粘合属性中列出的包中。在您发布的代码中,该类位于默认包中。很好,Hooks类必须是StepDefs文件夹上的“glue”
package stepdefs;
import org.testng.Assert;
import cucumber.api.DataTable;
import cucumber.api.PendingException;
import cucumber.api.java.After;
import cucumber.api.java.en.And;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;

public class StepDefinitions {
    @Given("^a successfull step$")
    public void aSuccessfullStep() throws Throwable {
        System.out.println("a successfull step");
    }

    @Given("^a not successfull step$")
    public void aNotSuccessfullStep() throws Throwable {
        System.out.println("a not successfull step");
        Assert.fail();
    }
}
package stepdefs;

import cucumber.api.Scenario;
import cucumber.api.java.After;
import cucumber.api.java.Before;

public class ServiceHooks {

//    protected WebDriver driver;

    @Before
    public void initializeTest()throws Exception{
//        Initializer.getInstance().init();
        System.out.println("Before hook");
    }

    @After
    public void embedScreenshot(Scenario scenario) {
        System.out.println("After hook");
        if (scenario.isFailed()) {
//            try {
//                System.out.println("Test finished with error");
//                driver.quit();
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
            System.out.println("action for failed scenario ...");
        }
    }
}
Running TestRunner
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNG652Configurator@532760d8
Feature: Test Before and After hook
Before hook
a successfull step
After hook
Before hook

  Scenario: Test hooks for a non failing scenario # demo.feature:3
    Given a successfull step                      # StepDefinitions.aSuccessfullStep()
a not successfull step
After hook
action for failed scenario ...

  Scenario: Test hooks for a failing scenario # demo.feature:6
    Given a not successfull step              # StepDefinitions.aNotSuccessfullStep()
      java.lang.AssertionError: null
        at org.testng.Assert.fail(Assert.java:94)
        at org.testng.Assert.fail(Assert.java:101)
        at stepdefs.StepDefinitions.aNotSuccessfullStep(StepDefinitions.java:22)
        at ✽.Given a not successfull step(demo.feature:7)


Failed scenarios:
demo.feature:6 # Scenario: Test hooks for a failing scenario

2 Scenarios (1 failed, 1 passed)
2 Steps (1 failed, 1 passed)
0m0.098s

java.lang.AssertionError: null
    at org.testng.Assert.fail(Assert.java:94)
    at org.testng.Assert.fail(Assert.java:101)
    at stepdefs.StepDefinitions.aNotSuccessfullStep(StepDefinitions.java:22)
    at ✽.Given a not successfull step(demo.feature:7)

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.78 sec <<< FAILURE!
feature(TestRunner)  Time elapsed: 0.15 sec  <<< FAILURE!
cucumber.runtime.CucumberException: java.lang.AssertionError: null
    at cucumber.api.testng.TestNGCucumberRunner.runCucumber(TestNGCucumberRunner.java:69)
    at TestRunner.feature(TestRunner.java:48)
Caused by: java.lang.AssertionError: null
    at org.testng.Assert.fail(Assert.java:94)
    at org.testng.Assert.fail(Assert.java:101)
    at stepdefs.StepDefinitions.aNotSuccessfullStep(StepDefinitions.java:22)
    at ✽.Given a not successfull step(demo.feature:7)


Results :

Failed tests:   feature(TestRunner): java.lang.AssertionError: null

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0