You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:09:00