当元素没有id或名称时,如何在机器人框架中使用Click Element函数?

时间:2017-07-26 10:27:10

标签: robotframework selenium2library

我目前正在机器人框架中使用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

3 个答案:

答案 0 :(得分:4)

我建议更灵活一些。如果您在定义灵活和唯一之间找到平衡,那么这是一种很好否则,最小的站点更改将破坏您的测试。

以下示例应匹配上一个示例:

  • 匹配任何包含LOGIN文本的链接

    Click Element       //a[contains(text(),'LOGIN')]
    
  • 匹配任何包含LOGIN文本的元素

    Click Element       //*[contains(text(),'LOGIN')]
    
  • 匹配任何类属性等于&#34; transparentBtn loginLink ng-scope&#34;

    的元素
    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')]
    

答案 1 :(得分:3)

尝试找到唯一的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

答案 2 :(得分:0)

为了回答标题中的问题,Selenium2Library支持许多不同的定位器。最具表现力的是xpath,可用于查找任何内容。请参阅Selenium2Library documentation中的查找或指定元素部分。

在您的情况下,如果您点击链接,则click link link=LOGIN应该有效。如果没有,可能是链接在iframe中,或者它可能被css隐藏(某些框架如angular和react会隐藏元素并用自己的东西替换它们)