CumberJava-Hook类-Quit驱动程序方法不工作
我是Cucumber方面的新手,我正在尝试实现一个钩子类。。。长话短说:司机。退出;方法不起作用 这是我的钩子课: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
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