运行时传递对象名与键获取对象值的问题求助
问题:运行时通过字符串路径获取对象属性值
相关代码
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
相关产品推荐
相关产品推荐

