Protractor自动化测试:sendKeys自动转文本为大写问题求助
解决Protractor输入文本自动转为全大写的问题
我之前帮同事排查过一模一样的问题!这种情况大概率是前端页面的自动转换逻辑在搞鬼,不是Protractor的锅,分两种场景给你具体解决方案:
1. 先区分「显示层面大写」还是「实际值被修改」
先打开浏览器DevTools定位到[ng-model="titleInput"]输入框:
如果看到元素CSS里有
text-transform: uppercase,那只是页面显示成大写,实际绑定的ngModel值还是你输入的原大小写!这时候你之前断言element.getText()就错了,应该断言输入框的实际值或者Angular模型数据:// 方式1:获取输入框的value属性 expect(element(by.model('titleInput')).getAttribute('value')).toBe("My New SPL"); // 方式2:直接从Angular Scope中读取模型值 expect(element(by.model('titleInput')).evaluate('titleInput')).toBe("My New SPL");如果CSS里没有这个样式,那就是前端的JS/Angular逻辑在强制转换输入值(比如
ng-change里写了titleInput = titleInput.toUpperCase(),或者自定义了输入转换指令),这时候模拟输入肯定会被转大写,得换个方式设置值。
2. 直接修改Angular模型值(绕过输入转换)
如果是前端逻辑强制转换输入内容,你可以跳过模拟输入的步骤,直接修改Angular Scope里的模型数据:
const inputElement = element(by.model('titleInput')); browser.executeScript(` const scope = angular.element(arguments[0]).scope(); scope.titleInput = "My New SPL"; scope.$apply(); // 触发Angular脏检查更新视图 `, inputElement.getWebElement());
这种方式直接把值塞到模型里,不会触发输入事件对应的转换逻辑,之后再断言视图或模型值都能成功。
3. 模拟更原生的输入行为(可选)
如果必须模拟用户输入(比如要触发输入关联的其他业务逻辑),可以试试用Protractor的actions API模拟原生输入,有时候能绕过一些前端的输入监听:
const inputElement = element(by.model('titleInput')); inputElement.clear(); browser.actions().sendKeys(inputElement, "My New SPL").perform();
不过这个方法不一定对所有场景有效,优先试试前面两种方案。
内容的提问来源于stack exchange,提问作者dooblr
相关产品推荐
相关产品推荐

