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

运行时传递对象名与键获取对象值的问题求助

问题:运行时通过字符串路径获取对象属性值

相关代码

Login.page.ts

// 注意:原代码用了=赋值,这里修正为对象属性正确的冒号:语法
export const loginPage = {
  username: '#userid',
  Passwd: '#passwd',
  login: '#login'
}

Login.feature

Given when I click on "loginPage.login" button.

StepDef.ts

// 注意:原代码Console是大写,修正为小写console
given("when I click on {string} button", function (locator: string){
  console.log(locator);
});

问题现象

  • 运行后console.log(locator)输出undefined
  • 硬编码console.log(loginPage.login)能正常输出#login

解决方案

1. 先修正基础语法错误

  • Login.page.ts中对象属性必须用冒号:赋值,原代码的等号=会导致语法错误
  • StepDef.ts中内置控制台对象是小写console,大写Console会报错

2. 实现字符串路径解析逻辑

你传入的"loginPage.login"是字符串,无法直接作为对象属性访问,需要解析这个路径来获取对应值:

// 先导入loginPage对象
import { loginPage } from './Login.page';

// 解析路径的工具函数,支持多级属性
function getNestedValue(obj: any, path: string) {
  return path.split('.').reduce((current, key) => {
    return current?.[key];
  }, obj);
}

// 修改StepDef代码
given("when I click on {string} button", function (locatorPath: string){
  // 建立字符串对象名和实际对象的映射
  const objMap = {
    loginPage: loginPage
    // 后续新增其他页面对象时,直接在这里添加即可
  };

  // 拆分路径为对象名和属性路径
  const [objName, propPath] = locatorPath.split('.', 2);
  const targetObj = objMap[objName];
  
  // 获取最终定位符
  const locator = getNestedValue(targetObj, propPath);
  console.log(locator); // 此时会输出#login
});

3. 简化版(仅两级路径场景)

如果你的定位符路径都是对象名.属性名这种两级结构,也可以直接拆分取值:

import { loginPage } from './Login.page';

given("when I click on {string} button", function (locatorPath: string){
  const [objKey, propKey] = locatorPath.split('.');
  const targetObj = { loginPage }[objKey];
  const locator = targetObj?.[propKey];
  console.log(locator);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 15:00:11