我正在使用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
你能告诉我,我做错了什么吗?
by.cssContainingText
支持RegExp,因为量角器5.2.1,如果你的量角器低于5.2.1,正则表达式将被视为字符串并使用string.indexOf()
,而不是使用RegExp.test()
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的答案,它更好。