当元素没有 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

如果我想单击此元素,我找不到要使用的定位器。

这些是我迄今为止尝试过的一些方法:

  1. Click Element css=a.loginLink
  2. 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')]