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

Protractor 量角器:如何通过精确文本查找元素?,protractor,Protractor,测试应用程序遇到了另一个问题。我需要按精确的文本单击元素,所以我找到了一个解决方案,我使用cssContainingText和each,然后如果Station要复制文本并选择某个元素,但我认为可能是更好的解决方案 第二个问题:我在stackoverflow的某个地方读到过 element.click().then(){ dosomething; }); 将导致“dosomething;”单击后将执行,我尝试了这个,但它不起作用,如何制作“dosomething;”将在单击后执行 您可以使用by

测试应用程序遇到了另一个问题。我需要按精确的文本单击元素,所以我找到了一个解决方案,我使用cssContainingText和each,然后如果Station要复制文本并选择某个元素,但我认为可能是更好的解决方案

第二个问题:我在stackoverflow的某个地方读到过

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

将导致“dosomething;”单击后将执行,我尝试了这个,但它不起作用,如何制作“dosomething;”将在单击后执行

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

通过精确文本

按css类使用精确文本

您可以找到许多xpath示例。还有一个您可以使用的选项。

1)Delian的答案是正确的,但在许多情况下,元素内容有额外的空白,因此您需要对其进行修剪:

getElementsByText:function(text,parentXpathSelector){
parentXpathSelector=parentXpathSelector | |'/';
返回元素(by.xpath(parentXpathSelector+'*[normalize space(text())=“'+text+'“]]”);
}

2)

Xpath很优雅,但如果其他人需要查看代码,它就不那么容易阅读。我经常只使用cssContainingText和chained by.css在repeater中选择一个元素。 示例:
element(by.css('.dropdown menu')).element(by.cssContainingText('span',constants.STATUS.PENDING)).click()

当然,它可能比xpath慢。我现在真的不知道。但是首先是可管理的

您的解决方案会给出与我相同的结果,如果我有一个名为button1和button12的元素,它会找到button1和button12。我想通过精确的文本找到元素,但只有一个元素应该是有效的。请发布您的html和选择器,我不知道您是否正确理解我。例如我有两个带文本的按钮:button1和button12。如果我写元素(通过.xpath('.//*[.=“button1”]'),我只想找到button1,这正是应该发生的事情,也正是它在我这方面的工作方式。除了当您有多个项,并且其中一项是另一项的子字符串时,它工作得很好
CSSCContainingText
将两者匹配。解决方案与我配合良好!我能知道为什么吗(-1)?请:)
 const allOptions = element.all(by.css('css-class'));
            allOptions.filter( (elem) => {
                return elem.getText().then((text) => {
                    return exact-text === text;
                });
            }).first().click();
element(by.xpath('.//*[.="text" and class="some-css-class"]'))
 const allOptions = element.all(by.css('css-class'));
            allOptions.filter( (elem) => {
                return elem.getText().then((text) => {
                    return exact-text === text;
                });
            }).first().click();