这是我的第一个黄瓜项目,我在设置所有内容时遵循了教程。一切似乎都是一样的,但出于某种原因我得到了这个:
\njava.lang.ExceptionInInitializerError。\n原因:java.lang.reflect.InaccessibleObjectException:无法使字段私有最终java.util.Comparator java.util.TreeMap.comparator可访问:模块java.base不“打开java.util”到未命名模块@74ad1f1f
\n知道如何解决这个错误吗?
\n下面我发布了控制台中出现的所有内容以及我的 pom 文件,以防我的依赖项出现问题,尽管教程的 pom 文件中的人员是相同的。
\n这就是我的控制台中显示的所有内容。
\n[31mFailed scenarios:[0m\n[31muni/login/Login.feature:3 [0m# Scenario: Enter the system.\n1 Scenarios ([31m1 failed[0m)\n5 Steps ([31m1 failed[0m, [36m4 skipped[0m)\n0m0.185s\n\njava.lang.ExceptionInInitializerError\n at cucumber.deps.com.thoughtworks.xstream.XStream.setupConverters(XStream.java:820)\n at cucumber.deps.com.thoughtworks.xstream.XStream.<init>(XStream.java:574)\n at cucumber.deps.com.thoughtworks.xstream.XStream.<init>(XStream.java:530)\n at cucumber.runtime.xstream.LocalizedXStreams$LocalizedXStream.<init>(LocalizedXStreams.java:50)\n at cucumber.runtime.xstream.LocalizedXStreams.newXStream(LocalizedXStreams.java:37)\n at cucumber.runtime.xstream.LocalizedXStreams.get(LocalizedXStreams.java:29)\n at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)\n at cucumber.runtime.Runtime.runStep(Runtime.java:300)\n at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)\n at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)\n at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)\n at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102)\n at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)\n at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)\n at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\n at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)\n at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)\n at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)\n at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)\n at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)\n at org.junit.runners.ParentRunner.run(ParentRunner.java:413)\n at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)\n at cucumber.api.junit.Cucumber.runChild(Cucumber.java:95)\n at cucumber.api.junit.Cucumber.runChild(Cucumber.java:38)\n at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)\n …Run Code Online (Sandbox Code Playgroud) 我有一个黄瓜和maven的项目,我也在使用JUnit.
我能够从Eclipse成功运行和构建我的项目.
现在我想在另一个系统中从命令行运行测试,该系统确实(应该)没有安装eclipse或者黄瓜.我有一个想法,我们可以从jar创建一个JAR,我们可以通过java cli命令运行测试.
下面是我尝试运行测试的组合,我也粘贴了pom.xml和RunCukesTest.java文件.
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pmc</groupId>
<artifactId>se</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>storeEnabler</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.52.0</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11-beta3</version>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
<build>
<testResources> …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Cucumber的Java8方言设置一个示例项目.我的问题是,我没有让它运行.我总是得到以下异常层次结构:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.068 sec <<< FAILURE! - in soy.wimmer.CucumberIT
Feature: Cucumber with Java8 Time elapsed: 0.051 sec <<< ERROR!
cucumber.runtime.CucumberException: Failed to instantiate class soy.wimmer.CucumberStepdefs
[…]
Caused by: java.lang.reflect.InvocationTargetException: null
[…]
Caused by: cucumber.runtime.CucumberException: java.lang.IllegalArgumentException: Wrong type at constant pool index
[…]
Caused by: java.lang.IllegalArgumentException: Wrong type at constant pool index
at sun.reflect.ConstantPool.getMemberRefInfoAt0(Native Method)
at sun.reflect.ConstantPool.getMemberRefInfoAt(ConstantPool.java:47)
at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getTypeString(ConstantPoolTypeIntrospector.java:37)
at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getGenericTypes(ConstantPoolTypeIntrospector.java:27)
at cucumber.runtime.java.Java8StepDefinition.<init>(Java8StepDefinition.java:45)
at cucumber.runtime.java.JavaBackend.addStepDefinition(JavaBackend.java:162)
at cucumber.api.java8.En.Given(En.java:190)
at soy.wimmer.CucumberStepdefs.<init>(CucumberStepdefs.java:8)
[…]
Results …Run Code Online (Sandbox Code Playgroud) 我想在我的Cucumber ExtentReports中编写自定义失败消息.
工具使用:
黄瓜
Java的
硒
JUnit的
ExtentReports
现在发生了什么:
我有一个黄瓜场景.
Given something
When I do something
Then this step fails
Run Code Online (Sandbox Code Playgroud)
失败的步骤失败:
Assert.assertTrue("CUSTOM_FAIL_MSG", some_condition);
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标:
到目前为止我研究过的内容:
有一个scenario.write("")功能,但这会在报告中创建一个新的信息日志(但我正在查找CustomFailure消息而不是新的日志条目)
scenario.stepResults具有在报告中显示的String.但是,我无法找到一种方法来设置相同的值.
有什么想法吗?
是否可以选择将录制的测试脚本导出到Katalon工作室的Java/JUuit(类似于slenium IDE)?因为我正在处理的应用程序只与IE兼容; 所以我不能使用selenuim IDE.所以我不得不找其他工具来播放/录制会话.
提前感谢您的帮助!谢谢!
selenium cucumber-jvm selenium-webdriver cucumber-java katalon-studio
我正在学习 Cucumber 进行单元测试,并尝试为 Radix Sort 代码编写单元测试。但我无法弄清楚如何提供整数数组作为特征文件中基数排序代码的输入。
我尝试提供以下输入:
Scenario: Sorting integer array using radix sort within the specified range
Given The nonnull integer array 10,25,0,1
When radix sort is performed over the range from 0 to 7
Then validate if the array is sorted
Run Code Online (Sandbox Code Playgroud)
对于上述场景,cucumber 需要下面提到的代码体:
@Given("The nonnull integer array {double}")
public void the_nonnull_integer_array(Double double1) {
// Write code here that turns the phrase above into concrete actions
throw new io.cucumber.java.PendingException();
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试输入为
Scenario: Sorting integer array using radix sort within …Run Code Online (Sandbox Code Playgroud) 有谁知道为什么'Cucumber Java'没有出现在"编辑配置 - >默认值 - > ????中,即使我的pom文件已下载依赖项,即黄瓜-java(1.1.5)
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-core</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>2.38.0</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
Pom.xml文件用于安装所有必要的插件,即用于java插件的黄瓜
我正在使用Selenium WebDriver(版本2.53.0)的Java实现来针对Web应用程序运行一些自动化测试.使用Cucumber的Java实现(版本1.2.3)以行为驱动测试格式编写测试.我使用Maven(版本3.3.9)导入所有依赖项,并构建和运行测试.使用Cucumber标签将测试组织成不同的类别.例如,我可以使用以下命令从命令行运行用@JohnnyBravo标记的一类测试:
cd path_to_Maven_POM_file
mvn clean test -Dcucumber.options="--tags @JohnnyBravo"
Run Code Online (Sandbox Code Playgroud)
在做了一些研究之后,我发现你可以使用Maven SureFire插件通过-Dsurefire.rerunFailingTestsCount=2在上面的Maven命令中根据此链接添加" "来重新运行失败的测试.然后,我尝试使用下面的命令重新运行该类测试,同时确保其中一些肯定会失败,以便查看它们是否会重新运行:
mvn clean test -Dcucumber.options="--tags @JohnnyBravo" -Dsurefire.rerunFailingTestsCount=2
Run Code Online (Sandbox Code Playgroud)
不幸的是,失败的测试没有重新运行.我在这做错了什么?
我的POM文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>regression-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<cucumber.version>1.2.3</cucumber.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>${cucumber.version}</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
</dependency> …Run Code Online (Sandbox Code Playgroud) java command-line maven-surefire-plugin selenium-webdriver cucumber-java
我正在使用 cucumber-jvm 在 Kotlin 中执行一些功能测试。
我有标准的空跑步者课程:
@RunWith(Cucumber::class)
@CucumberOptions(features=[foo],
glue=[bar],
plugin=[baz],
strict=true,
monochrome=true)
class Whatever
Run Code Online (Sandbox Code Playgroud)
实际步骤是在另一个类中使用 @ContextConfiguration springframework 注解定义的。该类还使用其他 spring 功能,如 @Autowire 或 @Qualifier
@ContextConfiguration(locations=["x/y/z/config.xml"])
class MyClass {
...
@Before
...
@Given("some feature file stuff")
...
// etc
}
Run Code Online (Sandbox Code Playgroud)
这一切在 Cucumber 版本 4.2.0 中都可以正常工作,但是升级到版本 6.3.0 就会出现问题。更新导入以匹配新的 Cucumber 项目布局后,测试现在失败并出现以下错误:
io.cucumber.core.backend.CucumberBackendException:请使用一些上下文配置注释胶水类。
它提供了示例来说明其含义...
例如:
@CucumberContextConfiguration
@SpringBootTest(classes = TestConfig.class)
public class CucumberSpringConfiguration {}
Run Code Online (Sandbox Code Playgroud)
或者:
@CucumberContextConfiguration
@ContextConfiguration( ... )
public class CucumberSpringConfiguration {}
Run Code Online (Sandbox Code Playgroud)
看起来它告诉我我可以将 @CucumberContextConfiguration 添加到 MyClass 中。
但为什么?
我明白了 @CucumberContextConfiguration 的意思,这里解释得很好,但是为什么我现在需要版本 6,而版本 4 …
cucumber-java ×10
cucumber ×7
cucumber-jvm ×4
bdd ×2
java ×2
selenium ×2
command-line ×1
eclipse ×1
extent ×1
java-8 ×1
junit ×1
junit4 ×1
maven ×1
unit-testing ×1