使用Protractor自动化AngularJS站点时点击按钮遇元素定位错误求助
解决Protractor中"more than one element found"的按钮定位警告
嘿,我明白你遇到的问题了——这个警告是说页面上不止一个按钮包含"शोधा"这个文本,Protractor默认帮你选了第一个,但这可能不是你想要的目标元素,或者你只是想消除这个烦人的警告。下面给你几个靠谱的解决方案:
1. 用精确文本匹配替代部分匹配
如果目标按钮的文本就是完整的"शोधा",没有其他额外字符,那直接用by.buttonText替代by.partialButtonText就好,这样定位范围会窄很多:
element(by.buttonText('शोधा')).click();
2. 明确指定取第一个匹配元素
如果你确定第一个匹配的元素就是你要点击的,那可以用element.all()主动获取元素列表,再取第一个,这样就不会触发警告了:
element.all(by.partialButtonText('शोधा')).first().click();
3. 结合其他属性做精准定位
如果页面上有多个带"शोधा"的按钮,你可以结合按钮的其他属性(比如class、id、父容器、ng-click指令等)来缩小范围。比如假设目标按钮在某个带特定class的容器里,或者有特定的ng-click属性:
// 示例:结合父容器和按钮文本定位 element(by.css('div.search-container button:contains("शोधा")')).click(); // 示例:结合ng-click属性定位(如果按钮有这个属性的话) element(by.css('button[ng-click="searchRecords()"]')).click();
修改后的测试代码示例
这里给你把最后一行替换成明确取第一个元素的版本,这样就能消除警告了:
describe('angularjs homepage', function() { it('should greet the named user', function() { browser.get('https://mahabhulekh.maharashtra.gov.in/'); element(by.partialLinkText('अमरावती')).click(); browser.sleep('5000'); element(by.model("distCode")).$('[value="string:4"]').click(); browser.sleep('5000'); element(by.model("talCode")).$('[value="number:7"]').click(); browser.sleep('5000'); element(by.model("vilCode")).$('[value="string:270400070038950000"]').click (); browser.sleep('5000'); element(by.id('rbsryno')).click(); browser.sleep('5000'); element(by.model("sno")).sendKeys("10"); browser.sleep('5000'); // 替换成明确取第一个匹配元素的写法 element.all(by.partialButtonText('शोधा')).first().click(); browser.sleep('5000'); }); });
另外提个小建议:尽量少用browser.sleep(),可以用browser.wait()配合Expected Conditions来等待元素可点击,这样测试会更稳定哦!
内容的提问来源于stack exchange,提问作者user1358401
相关产品推荐
相关产品推荐

