我已经为需要使用量角器识别和交互的元素添加了自定义数据属性。该属性为data-test-id
。我在onPrepare
的{{1}}回调中创建了一个自定义定位器来检测元素。它在下面:
conf.js
我的角度应用有一个onPrepare: function () {
by.addLocator('testId', function(value, parentElement) {
parentElement = parentElement || document;
var nodes = parentElement.querySelectorAll('[data-test-id]');
return Array.prototype.filter.call(nodes, function(node) {
return (node.getAttribute('[data-test-id]') === value);
});
});
}
,里面有文字Home。我为其添加了h1
属性:
data-test-id
这是我的量角器测试:
test.js :
<h1 data-test-id="test-element">Home</h1>
conf.js :
describe('Navigate to the website.', function() {
it('Should have the Heading as Home', function() {
browser.get('http://localhost:8888/#/');
browser.waitForAngular();
var textValue = 'Home';
var heading = element(by.testId('test-element'));
expect(heading.getText()).toEqual(textValue);
});
});
当我运行示例测试时,出现以下错误:
1)导航到网站。应该将标题作为主页 信息: NoSuchElementError:找不到使用locator的元素:by.testId(“test-element”)
我做错了什么?我该如何解决这个问题并使其发挥作用?
答案 0 :(得分:2)
获取属性后,您应该要求data-test-id
而不是[data-test-id]
。看起来像是复制粘贴错误。
替换:
return (node.getAttribute('[data-test-id]') === value);
使用:
return (node.getAttribute('data-test-id') === value);
答案 1 :(得分:0)
我也遇到了同样的问题,下面的解决方案解决了我的问题:
(LocationId, DeviceId)
querySelectorAll()需要将输入作为“标签”提供,如果未发送parentElement,则它将查询“ body”标签下的所有标签,否则查询parentElement中的所有元素。之后,遍历所有元素并检查属性“ lid”是否存在。如果存在,请验证该值,如果该值是所需值,则它将返回该元素。