You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Protractor测试中点击Send按钮无响应问题求助

解决Protractor点击"Send"按钮无响应的问题

嘿,我来帮你排查一下这个点击按钮没生效的问题~先看看你的按钮HTML结构:

<button id="recover-credentials-submit" ng-class="{disabled: disabled, &quot;btn-primary&quot;: true}" ng-disabled="disabled" type="submit" class="btn btn-primary pull-right"> 
  <span title="send recover email" aria-hidden="true" class="fa fa-key"></span>&nbsp;Send
</button>

你用element(by.buttonText('Send'))定位没反应,大概率是这些原因,对应的修复方案给你列出来了:

1. 按钮文本藏了个看不见的空格

仔细看按钮里的文本:&nbsp;Send,也就是实际渲染后是 Send(前面带一个不换行空格),而buttonText精确匹配文本内容的,直接写'Send'自然匹配不到。试试这两种办法:

  • partialButtonText匹配包含"Send"的文本,不管前面的空格:
    var buttonsend = element(by.partialButtonText('Send'));
    buttonsend.click();
    
  • 或者直接精确匹配带空格的文本(\u00A0&nbsp;的Unicode编码):
    var buttonsend = element(by.buttonText('\u00A0Send'));
    buttonsend.click();
    

2. 按钮可能处于禁用状态

HTML里有ng-disabled="disabled",如果页面上的disabled变量是true,按钮就是灰的点不动。这时候得先等按钮变成可点击状态再操作:

// 先引入ExpectedConditions
var EC = protractor.ExpectedConditions;
var buttonsend = element(by.id('recover-credentials-submit'));
// 最多等5秒,直到按钮可点击
browser.wait(EC.elementToBeClickable(buttonsend), 5000);
buttonsend.click();

3. 换个更靠谱的定位器(比如ID)

按钮有唯一的id="recover-credentials-submit",用ID定位比文本定位稳定多了——毕竟文本可能改,但ID一般不会随便动:

var EC = protractor.ExpectedConditions;
var buttonsend = element(by.id('recover-credentials-submit'));
browser.wait(EC.elementToBeClickable(buttonsend), 5000);
buttonsend.click();

4. 按钮可能在视口外,需要先滚动到可见

如果按钮在页面底部,浏览器没滚动到那里的话,点击也会失效。可以先把元素滚到视野里:

var EC = protractor.ExpectedConditions;
var buttonsend = element(by.id('recover-credentials-submit'));
// 执行JS滚动到元素可见
browser.executeScript("arguments[0].scrollIntoView();", buttonsend.getWebElement());
browser.wait(EC.elementToBeClickable(buttonsend), 5000);
buttonsend.click();

建议你先试试用ID定位加等待可点击的方案,这个成功率最高。要是还是不行,可以用element.all(by.buttonText('Send')).count()看看页面上有多少个匹配的按钮,会不会是定位到了其他同名元素哦~

内容的提问来源于stack exchange,提问作者alex shr

火山引擎 最新活动