我目前正在机器人框架中使用 Selenium2Library 来自动化一些 Web 测试。目前,我在使用“单击元素”功能自动单击登录按钮时遇到问题。
这是我想使用的元素:
<a class="transparentBtn loginLink ng-scope" ng-click="commonService.gigyaRaasLogin()" translate="BTN_ADMIN_LOGIN_WATCHLIST">LOGIN</a>
如果我从控制台复制,这就是 xpath:
//*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a
如果我想单击此元素,我很难找到要使用的定位器。
这些是我迄今为止尝试过的一些事情:
Click Element css=a.loginLink
Click Element link=LOGIN
尝试找到唯一的CSS(1个匹配节点)或尝试这个
Wait Until Element Is Visible xpath=//*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a 10
Click Element xpath=//*[@id="menu"]/div/div[5]/div/div/div[2]/ul/li[2]/a
我建议更加灵活一点。如果您在定义灵活和独特之间找到平衡,那么这是一个好方法。否则,最小的站点更改都会破坏您的测试。
以下示例应与前面的示例匹配:
匹配任何包含登录文本的链接
Click Element //a[contains(text(),'LOGIN')]
匹配任何包含 LOGIN 文本的元素
Click Element //*[contains(text(),'LOGIN')]
匹配类属性等于“transparentBtn loginLink ng-scope”的任何元素
Click Element //a[@class="transparentBtn loginLink ng-scope"]
可以同时查看多个属性
Click Element //a[@class='transparentBtn loginLink ng-scope' and @ng-click='commonService.gigyaRaasLogin()']
您可以使用 contains() 来检查字符串是否是类属性的一部分
Click Element //a[contains(@class,'loginLink')]
为了回答标题中的问题,Selenium2Library 支持许多不同的定位器。最具表现力的是 xpath,它可以用来查找几乎任何东西。请参阅Selenium2Library 文档中的定位或指定元素部分。
就您而言,如果您单击链接,则
click link link=LOGIN
应该可以工作。如果没有,则可能是链接位于 iframe 中,或者可能被 css 隐藏了(某些框架(例如 Angular 和 React)会隐藏元素并用自己的东西替换它们)
点击机器人框架中的按钮:-
Press keys Locator_here ENTER
它会起作用------