当元素没有 ID 或名称时,如何将 Click Element 功能与机器人框架一起使用?
How do I use Click Element function with robot framework when the element does not have id or name?
我目前在机器人框架中使用 Selenium2Library 来自动化一些 Web 测试。目前,我在使用 Click Element 函数自动点击登录按钮时遇到问题。
这是我想使用的元素:
<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
要回答标题中的问题,Selenium2Library 支持许多不同的定位器。最具表现力的是 xpath,它几乎可以用来查找任何东西。请参阅在 Selenium2Library documentation 中定位或指定元素部分。
在您的情况下,如果您单击 link,那么 click link link=LOGIN
应该可以。如果没有,则可能是 link 在 iframe 中,或者它可能被 css 隐藏(某些框架如 angular 和 React 将隐藏元素并用它们替换它们自己的东西)
尝试定位唯一 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
我建议稍微灵活一点。如果您找到定义灵活和独特之间的平衡,这是一个好方法。否则最小的站点更改都会破坏您的测试。
以下示例应与前面的示例相匹配:
匹配包含登录文本
的任何link
Click Element //a[contains(text(),'LOGIN')]
匹配任何包含登录文本的元素
Click Element //*[contains(text(),'LOGIN')]
匹配 class 属性等于 "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() 检查 class 属性
的字符串部分是否
Click Element //a[contains(@class,'loginLink')]
我目前在机器人框架中使用 Selenium2Library 来自动化一些 Web 测试。目前,我在使用 Click Element 函数自动点击登录按钮时遇到问题。
这是我想使用的元素:
<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
要回答标题中的问题,Selenium2Library 支持许多不同的定位器。最具表现力的是 xpath,它几乎可以用来查找任何东西。请参阅在 Selenium2Library documentation 中定位或指定元素部分。
在您的情况下,如果您单击 link,那么 click link link=LOGIN
应该可以。如果没有,则可能是 link 在 iframe 中,或者它可能被 css 隐藏(某些框架如 angular 和 React 将隐藏元素并用它们替换它们自己的东西)
尝试定位唯一 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
我建议稍微灵活一点。如果您找到定义灵活和独特之间的平衡,这是一个好方法。否则最小的站点更改都会破坏您的测试。
以下示例应与前面的示例相匹配:
匹配包含登录文本
的任何linkClick Element //a[contains(text(),'LOGIN')]
匹配任何包含登录文本的元素
Click Element //*[contains(text(),'LOGIN')]
匹配 class 属性等于 "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() 检查 class 属性
的字符串部分是否Click Element //a[contains(@class,'loginLink')]