量角器cssContainingText无法使用RegEx查找元素

问题描述 投票:1回答:2

我正在使用JavaScript和Protractor编写一些测试。说,我想找到class =“main-class”的元素,如下例所示:

<div class="main-class">
   ...
   <div class = "some-class">Search Line</div>
   ...
</div>

通过该元素的子元素的文本 - 孩子可以具有不同的属性和值。文本存储在变量中,也是由于某些情况我必须找到完全匹配。我正试图像这样做:

let text = 'Search Line';
let getElement= function(text) {
        let reg = new RegExp('^'+text+'$');
        return element(by.cssContainingText('.main-class', reg))}

但我总是得到同样的错误:

No element found using locator: by.cssContainingText(".main-class", "/^Search Line$/")

如果我将reg改为'some string' - 一切正常。看起来像cssContainingText只是不能用我的正则表达式,虽然量角器文档说,它可以通过regexp搜索:http://www.protractortest.org/#/api?view=ProtractorBy.prototype.cssContainingText

你能告诉我,我做错了什么吗?

javascript regex protractor
2个回答
2
投票

by.cssContainingText支持RegExp,因为量角器5.2.1,如果你的量角器低于5.2.1,正则表达式将被视为字符串并使用string.indexOf(),而不是使用RegExp.test()

enter image description here


1
投票

5.2.1之前的解决方案是使用xpath:

let text = 'Search Line';
let reg = '//*[starts-with(.,\''+text+'\')]';
element(by.xpath(reg)); //how to call element

这在功能上等同于正则表达式qazxsw poi

这也可以在5.2.1之后工作,但你看看Yong的答案,它更好。

© www.soinside.com 2019 - 2024. All rights reserved.