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

Java Cucumber:如何从单个场景中的所有步骤中获取字符串参数值

朱丰
2023-03-14

在我的功能文件中输入每个场景的实际场景之前,我正在寻找一种方法来获取每个步骤中传递的所有参数。

示例功能文件

Feature: Login action
  Background:
    When "{login url}" is open

  Scenario: Registered user provides valid username and password
    Given user enters username "{username}" and password "test password"
    And user clicks on "btnLogin"
    Then user is logged in

我想得到的参数:

到目前为止我所做的尝试:

我已经尝试使用一个公共挂钩,它将自动用于我的所有场景:

public class ScenarioHook {

    public ScenarioHook() {
    }

    @Before
    public void setupScenario(Scenario scenario) throws InterruptedException {
    //Here I am currently watching the {scenario} object and I can see all the steps
    //but I still dont know where to get the passed parameter values.
    }

    @After
    public void teardownScenario() throws InterruptedException {
    }
}

更新1:我想这样做的原因是我想操纵字符串(如果可能的话)。e、 g.“{}”中包含的所有数据将在进入实际场景之前转换为其他数据。

共有2个答案

颛孙正谊
2023-03-14

CucumberSceanario类不会提供此信息,因为我认为在开始执行场景之前,并没有实际加载和解析所有步骤,而是在场景执行期间逐个解析。我可以考虑的一个选项是创建一个后台步骤,在该步骤中,您将手动包括场景中涉及的所有参数。例如:

Feature: Login action

  Background:
    Given these parameters are using within this scenario: "{login url}", "{username}", "password", "btnLogin"

    When "{login url}" is open

公沈浪
2023-03-14

您可以使用@Transform注释将参数的值更改为步骤定义。

为此,您需要创建一个包含字符串修改逻辑的类,并返回修改后的值。

public class StringTransformer extends Transformer<String>{

    public String transform(String value) {     
        return "transformed "+value;
    }    
}

接下来,您需要使用方法参数前面的@Transform注释将此类包含在您的步骤定义中。

   @When("^Login with (.*?)$")
        public void helloHere(@Transform(StringTransformer.class) String userName)
    {
            System.out.println("TEXT --- " + userName);
    }

这应该会给你新的转换字符串。您可以使用它从初始字符串创建对象。(实际上这就是它的用途)

 类似资料:
  • 问题内容: 我不知道如何从字符串中获取Unicode字符。例如,如果字符串是“你好”,我如何获得第一个字符“你”? 从另一个地方我得到一种方法: 确实有效。但是我仍然有一些问题: 还有另一种方法吗? 为什么在Go中不能从字符串中获取Unicode字符,却可以获取字节数据? 问题答案: 首先,您可能需要阅读https://blog.golang.org/strings 。它将回答您的部分问题。 Go

  • 本文向大家介绍从Java字符串中获取所有数字,包括了从Java字符串中获取所有数字的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符串。 为了仅显示上述字符串中的数字,我们使用了该方法并将所有字符替换为空。 以下是最后的示例,该示例仅显示字符串中的数字。 示例 输出结果

  • 如何在我的routes.jsx文件中定义一个路由来捕获参数值,这些参数值是在从服务器重定向后由Twitter的单点登录进程生成的URL中获得的? 我尝试了以下路由配置,但未捕获提到的参数:

  • 问题内容: 我有一个HTML表单字段,其中包含一些URL字符串作为值。示例值是: 等等 如何仅从这些URL /值中获取参数? 请注意,我没有从浏览器地址栏中获取这些字符串。 问题答案: 您可以使用和。

  • 我有一个HTML表单字段< code > $ _ POST[“url”],值是一些URL字符串。 示例值为: 等等。 如何仅从这些 URL/值中获取参数? 请注意,我不是从浏览器地址栏中获取这些字符串的。

  • 我正在从我的数据框中查询一个值,它似乎是“dtype:object”。我只想按原样打印值,而不打印索引或其他信息。我该怎么做? 预期产出:b