Protractor 4.0.14升级至5.3.0后出现searchText.indexOf不是函数错误求助
问题原因分析
这个报错的核心原因是Protractor 5.x版本对by.cssContainingText()的参数校验变得更严格了,而4.x版本存在隐式类型转换的兼容处理。
具体来说,by.cssContainingText(locator, searchText)的第二个参数searchText在5.x中要求必须是字符串类型,如果传入的是数字、对象、undefined或者其他非字符串值,就会触发searchText.indexOf is not a function的错误——因为indexOf是字符串的专属方法,非字符串类型调用它自然会报错。而在4.0.14版本中,Protractor内部会自动尝试将非字符串参数转换为字符串,所以不会报错。
解决方案
针对你的场景,你可以按照以下步骤排查和修复:
- 确认
'some description'的类型:检查这个值是不是不小心变成了非字符串类型(比如从接口返回的数字、未初始化的变量、或者对象)。如果是变量,确保它被正确转换为字符串,比如用String(yourDescriptionVar)或者模板字符串`${yourDescriptionVar}`包裹。 - 简化定位器写法:你当前的链式调用
element.all(by.css('...')).all(by.cssContainingText('...', '...'))可以合并为一个更高效的定位器,避免链式调用可能带来的潜在问题:
这里的element.all(by.cssContainingText('some locator some locator', 'some description'))'some locator some locator'是父定位器和子定位器的CSS组合(比如父是.parent,子是.child,就写成.parent .child)。 - 检查版本兼容性:如果上述方法无效,可以确认你的ChromeDriver版本是否和Chrome 65.0.3325.146兼容——Protractor 5.3.0对应的ChromeDriver版本建议是2.38或2.39(Chrome 65对应这两个版本的Driver),版本不匹配也可能引发奇怪的错误。
内容的提问来源于stack exchange,提问作者ryasui
相关产品推荐
相关产品推荐

