searchText.indexOf不是Protractor 5.3.0中的函数

时间:2018-03-27 20:58:55

标签: protractor

我们最近从Protractor 4.0.14升级到5.3.0并遇到错误。我们的测试做的是:

element.all(by.css('some locator')).all(by.cssContainingText('some locator', 'some description'));

它使用量角器4.0.14很好,但是使用5.3.0,我收到了这个错误:

  
      
  • 失败:未知错误:searchText.indexOf不是函数       (会话信息:chrome = 65.0.3325.146)
  •   

最新版本的量角器是否会导致这种情况发生变化?

3 个答案:

答案 0 :(得分:1)

就我而言,问题只是我没有将字符串参数传递给 cssContainingText,而是一个数字值。修复只是将其转换为字符串(添加 +''),例如

by.cssContainingText('css selector', 123 + ''))

在以前的版本中,由于 Javascript 的动态类型,这运行良好,但是当添加了正则表达式支持(如另一个 answer 中所述)时,the code 现在开始调用 indexOf 函数仅适用于字符串的参数。

答案 1 :(得分:0)

https://github.com/angular/protractor/commits/master/lib/locators.ts

看起来cssContainingText定位器有一些变化以允许正则表达式。但我在该文件中看不到indexOf

这是承诺 https://github.com/angular/protractor/pull/4532

我发现它也涉及clientSideScripts.ts https://github.com/angular/protractor/blob/master/lib/clientsidescripts.js

functions.findByCssContainingText中,它引用了searchText.indexOf('__REGEXP__'),如果searchText未定义,它可能会遇到类似于您的错误条件。

在没有第二个参数的情况下使用by.cssContainingText('someSelector')?或者你的第二个参数可能以null / undefined(而不是空字符串)的形式出现?

答案 2 :(得分:0)

我发现,如果我从包含选择器的对象之外的另一个对象内部引用一个描述符(在我的情况下为regex),我也会遇到此错误。基本上给它传递索引而不是直接引用会破坏它。像这样...

element.all(by.css('some locator')).all(by.cssContainingText('some locator', CONSTANTS.regexPatterns.someDescriptionRegex)

虽然在'this'中更直接的引用还是可以的...

someDescriptionRegex: {get function() { return new RegExp(...) }},

element.all(by.css('some locator')).all(by.cssContainingText('some locator', this.someDescriptionRegex)

希望这会有所帮助。