Nightwatch 2.6使用getAttribute获取元素值报错及空值问题求助
Nightwatch v2.6 中 getAttribute 调用失败的修复方案
问题原因
Nightwatch v2 重构了命令执行系统,完全切换为 Promise 驱动,不再支持 v1 中把回调函数作为命令参数的写法。你原来的代码里将回调作为 getAttribute 的第三个参数,在 v2 中会被识别为无效参数,导致“未知命令”错误;同时 perform() 的使用场景也大幅减少,因为 Promise 链已经能更清晰地处理异步逻辑。
修复方案
推荐使用 async/await 写法(更直观易读),或者基于 Promise 的链式调用:
方案1:async/await(推荐)
将测试方法声明为 async,直接等待 getAttribute 的返回值:
// 确保所在测试方法是 async 函数 async yourTestMethod() { if (options.policyNumber !== '') { // 获取 input 的 value 属性值 const policyNumberValue = await this.browser.getAttribute( this.selectors.panelProtection.tabDetails.inputPolicyNumber, 'value' // 注意这里必须传字符串 'value',指定要获取的属性名 ); // 直接断言 this.browser.assert.equal(policyNumberValue, options.policyNumber); } }
方案2:Promise 链式调用
如果习惯链式写法,可以用 .then() 处理返回值:
if (options.policyNumber !== '') { this.browser .getAttribute(this.selectors.panelProtection.tabDetails.inputPolicyNumber, 'value') .then(policyNumberValue => { this.browser.assert.equal(policyNumberValue, options.policyNumber); }); }
额外注意点
- 你原来代码中的
value参数如果是指元素的value属性,必须写成字符串'value',否则会被当作变量解析,导致获取属性失败。 getText无法解决问题是因为 input 元素的内容存储在value属性中,而非文本节点,所以必须用getAttribute('value')来获取。
内容的提问来源于stack exchange,提问作者Aaisha Zaman
相关产品推荐
相关产品推荐

