量角器的cssContainingText无法使用RegExp找到元素

时间:2018-03-05 14:48:08

标签: javascript regex protractor

我正在使用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

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

2 个答案:

答案 0 :(得分:2)

by.cssContainingText支持自Proractor 5.2.1以来的RegExp, 如果您的量角器低于5.2.1,则regexp将被视为字符串并使用string.indexOf(),而不是使用RegExp.test()

enter image description here

答案 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 的答案,它会更好。