You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Selenium Feature文件中使用Step定义返回的Java函数值

在Cucumber中传递Step返回的appId到Feature表格的解决方案

Cucumber本身不支持直接在Feature表格里引用其他Step的返回值,你需要通过共享上下文来存储和传递appId,具体实现步骤如下:

1. 创建场景上下文类

这个类用来存储测试过程中跨Step共享的数据,确保每个Scenario有独立的变量空间:

public class ScenarioContext {
    private final Map<String, Object> contextMap = new HashMap<>();

    public void set(String key, Object value) {
        contextMap.put(key, value);
    }

    public Object get(String key) {
        return contextMap.get(key);
    }
}

2. 修改获取appId的Step,将值存入上下文

更新你的@And Step定义,把获取到的appId存入上下文(如果用Cucumber的PicoContainer依赖注入,直接把ScenarioContext作为参数即可,Cucumber会自动为每个Scenario创建实例):

@And("we get appId from console")
public void weGetAppIdfromConsole(ScenarioContext scenarioContext) {
    JavaScriptExecutor executor = (JavascriptExecutor) driver;
    String appId = (String) executor.executeScript("return page_data.application_id");
    System.out.println(appId);
    // 存入上下文,自定义键名比如"APP_ID"
    scenarioContext.set("APP_ID", appId);
}

3. 修改填充表单的Step,读取上下文值

更新@When Step定义,读取上下文里的appId,替换表格中的占位符:

@When("we fill in following details:")
public void weFillInFollowingDetails(List<Map<String, String>> formDetails, ScenarioContext scenarioContext) {
    for (Map<String, String> detail : formDetails) {
        String fieldName = detail.get("applicationId");
        String inputValue = detail.get("value"); // 建议把表格第三列表头改成"value",更清晰
        
        // 检查是否是占位符,这里约定用${APP_ID}表示要替换的变量
        if ("${APP_ID}".equals(inputValue)) {
            inputValue = (String) scenarioContext.get("APP_ID");
        }
        
        // 执行填充操作,根据fieldName找到元素并输入值
        driver.findElement(By.name(fieldName)).sendKeys(inputValue);
    }
}

4. 更新Feature文件的表格

在表格中使用约定的占位符${APP_ID}:

When we fill in following details:
| applicationId | text | ${APP_ID} |

额外说明

  • 如果你没有用依赖注入框架,需要手动在每个Scenario开始时初始化ScenarioContext,避免不同Scenario之间的数据污染。
  • 可以根据需要扩展上下文类,添加键存在性判断逻辑,避免空指针异常。

内容的提问来源于stack exchange,提问作者user14198433

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:07:13