Protractor searchText.indexOf不是量角器5.3.0中的函数
我们最近从量角器4.0.14升级到了5.3.0,遇到了一个错误。我们的测试是这样做的:Protractor searchText.indexOf不是量角器5.3.0中的函数,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) 最新版本的量角器有
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)
cssContainingText
定位器进行了一些更改,以允许使用正则表达式。但是我在那个文件中没有看到索引
这里是提交
我看到它也涉及到clientSideScripts.ts
在functions.findByCssContainingText
中,它引用了searchText.indexOf(“'uuuu REGEXP_uu')
,如果searchText
未定义,它可能会遇到与您类似的错误情况
是否在没有第二个参数的情况下使用.cssContainingText('someSelector')
?或者你的第二个参数可能是空的/未定义的(而不是空字符串)?我发现,如果我从包含选择器的对象之外的另一个对象内部引用描述符(在我的例子中是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)
希望这有帮助。在我的例子中,问题只是我没有将字符串参数传递给
csscontingtext
,而是传递了一个数字值。修复方法只是将其转换为字符串(添加+'
)
在以前的版本中,由于Javascript的动态键入,这工作正常,但当添加了regex支持(如另一个版本中所述)后,现在开始对参数调用
indexOf
函数,该函数只对字符串有效。我实际上没有看到getText()
调用?看起来您只是返回了所有匹配的元素。在这种情况下,searchText
不是字符串,而是ElementArrayFinder
。你确定你发布了正确的代码片段吗?@tehbeardone你是对的,我不是在调用getText()。似乎错误发生在对cssContainingText()的调用中。有趣。searchText
从哪里来?我在你的代码片段中没有看到它?我怀疑可能会使用element.all().all()
,从我的观点来看,你只能使用element.all()
,不能一个接一个地链接all()
by.cssContainingText('css selector', 123 + ''))