根据文档,要按名称获取单个属性,可以在.getAttribute()
上使用WebElement
var myElement = element(by.id('myId'));
expect(myElement.getAttribute('myAttr')).toEqual('myValue');
但是,如何获得元素所具有的所有属性呢?
在量角器API中没有关于这个用例/功能的信息。
发布于 2015-01-07 11:50:07
您可以展开javascript的Element
类型并添加getAttributes()
函数:
Element.prototype.getAttributes = function() {
return (function (node) {
var attrs = {};
for (var i=0;i<node.length;i++) {
attrs[node.item(i).name] = node.item(i).value;
}
return attrs;
})(this.attributes);
};
然后,可以使用用于一个属性的相同方法测试属性的完整性:
var myElement = element(by.id('myId'));
expect(myElement.getAttributes()).toEqual({'attr1': 'value1', 'attr1': 'value1', ... });
发布于 2015-01-06 11:11:57
如果您需要的属性以数据为前缀,那么您应该能够对元素使用dataset,该元素将使执行脚本收缩一点:
browser.executeScript('return arguments[0].dataset;', elm).then(function (attrs) {
console.log(attrs);
});
发布于 2015-01-07 08:46:26
您必须使用browser.executeScript()
函数调用而不是量角器API,因为Element.attributes
没有量角器API实现:
var elem = element(by.id('runButton'));
browser.executeScript("return arguments[0].attributes", elem.getWebElement())
.then(function (attrs) {
console.log(attrs.length); // outputs numbers of attributes.
// access collection of Attr objects
console.log(attrs[0].isId); // outputs `true`
console.log(attrs[0].name); // outputs `id`
console.log(attrs[0].value); // outputs `runButton`
});
请记住,当表示属性时,它意味着一个命名的映射结构,而不是DOM模型上下文中的一个数组。这意味着您必须使用NamedNodeMap来访问Attr对象的集合。
它的工作方式与@alecxe的答案中没有迭代部分的方式相同。
https://stackoverflow.com/questions/27694570
复制相似问题