目标
您好,我希望使用 cy.window() 为页面的 window
对象收集自定义属性值。
问题
当cy.log()与JSON.stringify()
一起使用时,表示它确实具有带值的属性;然而,当使用 lodash _.has()
时,没有这些属性,因此没有价值,因为没有找到这些属性。
代码
以下使用 cy.window() 的 Cypress 自定义命令收集自定义窗口的属性
export function cmdCypressWindow($propName: string) {
cy.window()
.its($propName)
.then(($propValue: Cypress.AUTWindow) => {
cy.log('props names:', JSON.stringify(Object.getOwnPropertyNames($propValue), null, 2));
cy.log('props values:', JSON.stringify($propValue, null, 2));
cy.log('VERSION prop:', _.has($propValue, 'VERSION'));
cy.log('HOST prop:', _.has($propValue, 'HOST'));
cy.log('VERSION value:', _.get($propValue, 'VERSION'));
cy.log('HOST value:', _.get($propValue, 'HOST'));
});
}
传入参数 $propName
值 'ACT'
,因为我期望页面的窗口对象包含 window.ACT["VERSION"]
。< /p>
使用示例代码,日志输出显示页面的窗口确实包含属性 ACT["VERSION"]
。
但是,访问此窗口对象时,列出的属性不可用且未定义:
window
- its .ACT
log props names:, [ "__esModule", "VERSION", "HOST", "RulesList", "RulesAddEdit", "AppsList", "AppsOAuth", "AppsAdd" ]
log props values:, { "VERSION": "0.2.11", "HOST": "radmin" }
log VERSION prop:, false
log HOST prop:, false
log VERSION value:
log HOST value:
我该如何解决这个问题?谢谢,非常感谢所有反馈。
答案 0 :(得分:0)
在这里找到部分解决方案: TypeScript: Find Key / Value in Object (list comprehension?)
修改了功能:
export function cmdCypressWindow($propName: string) {
cy.window()
.its($propName)
.then(($propValue: Cypress.AUTWindow) => {
const actValues: Record<string, string> = {};
Object.keys($propValue).forEach(key => {
// @ts-ignore
if (typeof $propValue[key] !== 'function') {
// @ts-ignore
actValues[key as string] = $propValue[key];
}
});
cy.log(`window.${$propName}`, JSON.stringify(actValues, null, 2));
cy.wrap(actValues);
});
}
结果表明我能够从 window
对象获取值:
log props names:, [ "__esModule", "VERSION", "HOST", "RulesList", "RulesAddEdit", "AppsList", "AppsOAuth", "AppsAdd" ]
log window.ACT, { "VERSION": "0.2.11", "HOST": "radmin" }
wrap {version: 0.2.11, host: radmin}