我正在使用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
你能告诉我,我做错了吗?
答案 0 :(得分:2)
by.cssContainingText
支持自Proractor 5.2.1以来的RegExp,
如果您的量角器低于5.2.1,则regexp将被视为字符串并使用string.indexOf()
,而不是使用RegExp.test()
答案 1 :(得分:1)
5.2.1之前的解决方案是使用xpath:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<div>grab me and drag over the table</div>
<table>
<tr>
<td>11111111111111111111111</td>
</tr>
<tr>
<td>222222222222222222222</td>
</tr>
<tr>
<td>333333333333333333333</td>
</tr>
<tr>
<td>11111111111111111111111</td>
</tr>
<tr>
<td>222222222222222222222</td>
</tr>
<tr>
<td>333333333333333333333</td>
</tr>
</table>
这在功能上与正则表达式let text = 'Search Line';
let reg = '//*[starts-with(.,\''+text+'\')]';
element(by.xpath(reg)); //how to call element
这也可以在5.2.1之后使用,但你可以查看 Yong 的答案,它会更好。