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

cucumber步骤定义未链接

易衡
2023-03-14

我今天将我的serenity和cucumber测试升级到2.6.0 en cucumber 6版本。只需要更改大量程序包,并且功能文件的步骤不再链接到步骤定义。如果我的cucumberrunner的设置

import io.cucumber.junit.CucumberOptions;
import net.serenitybdd.cucumber.CucumberWithSerenity;
import org.junit.runner.RunWith;

@RunWith(CucumberWithSerenity.class)
@CucumberOptions(features = {"src/test/resources/features"},
        glue = {"be.nbb.hive.cucumber.steps"})
public class CucumberRunner {
}

但是,如果我在功能文件中查看intellij,您将无法再单击步骤以转到定义。当我运行功能文件时,我会得到以下异常:

10:40:50.005 [main] DEBUG n.thucydides.core.steps.StepEventBus - Test suite started for story net.thucydides.core.model.Story@aa2c74aa
10:40:50.006 [main] INFO   - Test Suite Started: Smoke Test Login
sep 09, 2021 10:40:50 AM io.cucumber.core.runtime.Runtime run
SEVERE: Exception while executing pickle
java.util.concurrent.ExecutionException: java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 15
^I click on (?:?:the )?\?(?:.*)?(?:?:.*)? \((name|id|css|xpath\): \?(?:.+)?\\)$
               ^
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at io.cucumber.core.runtime.Runtime.run(Runtime.java:93)
    at net.serenitybdd.cucumber.cli.Main.run(Main.java:27)
    at net.serenitybdd.cucumber.cli.Main.main(Main.java:18)
Caused by: java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 15
^I click on (?:?:the )?\?(?:.*)?(?:?:.*)? \((name|id|css|xpath\): \?(?:.+)?\\)$
               ^
    at java.util.regex.Pattern.error(Pattern.java:1955)
    at java.util.regex.Pattern.sequence(Pattern.java:2123)
    at java.util.regex.Pattern.expr(Pattern.java:1996)
    at java.util.regex.Pattern.group0(Pattern.java:2821)
    at java.util.regex.Pattern.sequence(Pattern.java:2051)
    at java.util.regex.Pattern.expr(Pattern.java:1996)
    at java.util.regex.Pattern.compile(Pattern.java:1696)
    at java.util.regex.Pattern.<init>(Pattern.java:1351)
    at java.util.regex.Pattern.compile(Pattern.java:1054)
    at io.cucumber.cucumberexpressions.DefaultPatternCompiler.compile(DefaultPatternCompiler.java:12)
    at io.cucumber.cucumberexpressions.TreeRegexp.<init>(TreeRegexp.java:22)
    at io.cucumber.cucumberexpressions.CucumberExpression.<init>(CucumberExpression.java:37)
    at io.cucumber.cucumberexpressions.ExpressionFactory.createExpression(ExpressionFactory.java:34)
    at io.cucumber.core.stepexpression.StepExpressionFactory.crateExpression(StepExpressionFactory.java:88)
    at io.cucumber.core.stepexpression.StepExpressionFactory.createExpression(StepExpressionFactory.java:61)
    at io.cucumber.core.stepexpression.StepExpressionFactory.createExpression(StepExpressionFactory.java:49)
    at io.cucumber.core.runner.CachingGlue.lambda$prepareGlue$3(CachingGlue.java:244)
    at java.util.ArrayList.forEach(ArrayList.java:1249)
    at io.cucumber.core.runner.CachingGlue.prepareGlue(CachingGlue.java:243)
    at io.cucumber.core.runner.Runner.runPickle(Runner.java:70)
    at io.cucumber.core.runtime.Runtime.lambda$execute$5(Runtime.java:110)
    at io.cucumber.core.runtime.CucumberExecutionContext.runTestCase(CucumberExecutionContext.java:117)
    at io.cucumber.core.runtime.Runtime.lambda$execute$6(Runtime.java:110)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at io.cucumber.core.runtime.Runtime$SameThreadExecutorService.execute(Runtime.java:233)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
    at io.cucumber.core.runtime.Runtime.lambda$run$2(Runtime.java:86)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.SliceOps$1$1.accept(SliceOps.java:204)
    at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at io.cucumber.core.runtime.Runtime.run(Runtime.java:87)
    ... 2 more

我不确定是什么地方出了问题,因为相同的代码适用于以前的版本

共有1个答案

解明辉
2023-03-14

这是一个与升级到Cucumber 6相关的问题,与Cucumber 2相比,Cucumber 6具有不同的API、语法和体系结构。您需要重写许多步骤定义方法,因为Cucumber 2中使用的正则表达式需要更新,参数转换逻辑也需要更新(使用不同的类)。

 类似资料:
  • 我不能为一个项目用cucumber执行简单的测试。我在Intellij13社区,使用cucumber插件。 我在features目录中编写了我的features文件,我还通过插件实现了创建它们的步骤。intellij可以识别功能文件中的我的步骤,它可以导航并转到步骤实现。当我尝试运行我的场景时,if无法声明“未定义的步骤”。任何帮助都将不胜感激。 以下是我如何组织我的项目:

  • TL:DR控制台不显示缺少步骤的步骤正则表达式 编辑:添加功能文件

  • 我遇到了以下问题。我在Intellij中有四个Cucumber特性文件。我通过IntelliJ插件添加了Cucumber支持。在创建了特性之后,我按如下所示编辑了配置,这样我就可以执行特性文件了。 可悲的是,当我尝试使用步骤定义运行cucumber特性时,我得到的提示是“您可以使用下面的代码片段实现缺少的步骤:”但我已经这样做了。我已经将这些片段复制到步骤定义文件中。当我悬停一个场景时,Intel

  • 我已经开始了一个“放心cucumber”课程,我正在努力完成第一个视频练习。由于某些原因,我无法创建特征文件来查找步骤定义文件。我已经检查了glue选项值是否设置为正确的包名。 除此之外,我还看到,当我试图从功能文件中设置新的步骤定义,并将光标放在路径值上时,会显示一条错误消息:“错误的步骤定义目录路径”。此错误与所有目录值一起显示。 我正在使用IntelIJ 2020.2.3,我已经安装了插件:

  • 自从我升级到最新的社区版IntelliJ 15.0.3以来,每当我使用alt-enter从功能定义文件自动生成步骤定义时,它都会以驼峰大小写而不是带下划线的常规样式创建方法。 例如,它过去是这样生成的 但现在它产生了通常的camelCase惯例: 有没有办法把这个设置改回第一种样式? 谢谢

  • 我对Cucumber JVM无法获取步骤定义有问题。我在Runner文件中确实有@CucumberOptions。我的功能文件也有@SmokeTest标签。这个问题仍然存在。请帮助!我已经尝试解决这个问题几天了。 Maven 和 Java 版本: Apache Maven 3.0.4Java版本:1.6.0_65,供应商:Apple Inc. 项目结构: 演示-- 运行器文件: 包com.smok