量角器自定义定位器无法找到该元素

时间:2015-06-04 13:39:33

标签: javascript angularjs selenium protractor end-to-end

我已经为需要使用量角器识别和交互的元素添加了自定义数据属性。该属性为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”)

我做错了什么?我该如何解决这个问题并使其发挥作用?

2 个答案:

答案 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”是否存在。如果存在,请验证该值,如果该值是所需值,则它将返回该元素。