java - 黄瓜步骤定义未链接
问题描述
我今天将我的 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
我不确定出了什么问题,因为相同的代码与以前的版本一起使用
解决方案
这是一个与升级到 Cucumber 6 相关的问题,与 Cucumber 2 相比,它具有不同的 API、语法和架构。您将需要重写许多步骤定义方法,因为 Cucumber 2 中使用的正则表达式需要更新,并且参数转换逻辑也需要更新(使用不同的类)。
推荐阅读
- python - 使用python根据某些值过滤嵌套的json
- python - 从字符串中提取数据
- python - numpy 可以对字典对象列表进行排序,还是 pandas 数据框操作是我唯一的选择?
- python - 遍历字符串列表:错误消息
- python - 打开电子邮件时触发Python Outlook win32事件
- python - 如何使用 ruamel.yaml 读取多个 yaml 定义
- pandas - 从包含所有行的数据框中选择两组列
- flutter - 在颤动中使用索引更改文本的颜色部分
- visual-studio - Visual Studio 2019 中的 ThreadSanitizer
- html - Tailwind css 弹出窗口显示在图标下方