Nightwatch UI自动化测试中WebElementID返回undefined的原因
问题原因
该问题由Nightwatch版本迭代的协议适配变更导致:
- Nightwatch v1.x及更早版本兼容旧版JSONWP协议,
elements接口返回的元素对象唯一标识字段为ELEMENT - Nightwatch v2.x及之后版本默认遵循W3C WebDriver标准,元素唯一标识字段调整为
element-6066-11e4-a52e-4f735466cecf,旧字段ELEMENT不再默认返回,直接读取就会得到undefined
解决方案
方案1:兼容字段名读取元素ID
修改循环内的元素ID取值逻辑,适配新旧版本的字段规则:
module.exports = { 'TESTTT'(browser){ browser .url ("https://xyz") .elements('xpath', '//div[@class="ant-card-head-title"]//span', function (res) { console.log(res.value) res.value.forEach(function (elementsObj) { // 优先取旧字段,不存在则取W3C标准字段 const elementId = elementsObj.ELEMENT ?? elementsObj['element-6066-11e4-a52e-4f735466cecf'] console.log("WebElementID: " + elementId) browser.elementIdText(elementId, function (result) { console.log('\n' + result.value) }) }) }) } }
方案2:使用官方推荐API简化操作(更建议)
不需要手动处理元素ID,直接调用getText接口批量获取所有匹配元素的文本内容,代码更简洁易维护:
module.exports = { 'TESTTT'(browser){ browser .url ("https://xyz") .getText('xpath', '//div[@class="ant-card-head-title"]//span', function(result) { // 直接返回所有元素文本组成的数组 result.value.forEach(text => console.log(text)) }) } }
内容的提问来源于stack exchange,提问作者Dhruv Bhatnagar
相关产品推荐
相关产品推荐

