量角器:如何通过精确文本查找元素?

时间:2015-06-25 07:41:36

标签: protractor

测试应用程序遇到了另一个问题。我需要通过精确文本单击元素,所以我找到了一个解决方案,我使用cssContainingText和每个,然后如果声明comapre文本并选择某个元素,但我想可能是一个更好的解决方案的那个紫色?

第二个问题:在stackoverflow上的某处,我读到了

element.click().then(){
dosomething;
});

会导致这样的事情;'将点击后执行,我尝试这个并且它不起作用,如何制作这样的东西;'将在点击后执行;

4 个答案:

答案 0 :(得分:16)

您可以使用by.xpath作为选择器:

按照确切的文字

element(by.xpath('.//*[.="text"]'))

通过带有确切文字的css类

element(by.xpath('.//*[.="text" and class="some-css-class"]'))

您可以找到很多xpath示例online。您还可以使用tester

答案 1 :(得分:4)

1)Delian有正确的答案,但在很多情况下元素内容有额外的空格,所以你需要修剪它们:

getElementsByText: function (text, parentXpathSelector) {
    parentXpathSelector = parentXpathSelector || '//';
    return element(by.xpath(parentXpathSelector + '*[normalize-space(text())="' + text + '"]'));
}

2)https://stackoverflow.com/a/21785088/3147680

答案 2 :(得分:0)

如果其他人需要查看代码,Xpath很优雅,但不容易阅读。我经常只使用cssContainingText和bycss链接在转发器中选择一个元素。 例如:element(by.css('.dropdown-menu')).element(by.cssContainingText('span', constants.STATUS.PENDING)).click(); 确定它可能比xpath慢。我现在真的不知道。但是可管理第一

答案 3 :(得分:-1)

 const allOptions = element.all(by.css('css-class'));
            allOptions.filter( (elem) => {
                return elem.getText().then((text) => {
                    return exact-text === text;
                });
            }).first().click();