测试应用程序遇到了另一个问题。我需要通过精确文本单击元素,所以我找到了一个解决方案,我使用cssContainingText和每个,然后如果声明comapre文本并选择某个元素,但我想可能是一个更好的解决方案的那个紫色?
第二个问题:在stackoverflow上的某处,我读到了
element.click().then(){
dosomething;
});
会导致这样的事情;'将点击后执行,我尝试这个并且它不起作用,如何制作这样的东西;'将在点击后执行;
答案 0 :(得分:16)
您可以使用by.xpath
作为选择器:
按照确切的文字
element(by.xpath('.//*[.="text"]'))
通过带有确切文字的css类
element(by.xpath('.//*[.="text" and class="some-css-class"]'))
答案 1 :(得分:4)
1)Delian有正确的答案,但在很多情况下元素内容有额外的空格,所以你需要修剪它们:
getElementsByText: function (text, parentXpathSelector) {
parentXpathSelector = parentXpathSelector || '//';
return element(by.xpath(parentXpathSelector + '*[normalize-space(text())="' + text + '"]'));
}
答案 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();