【问题标题】:Robot Framework: passing argument to a keyword that returns an XPath机器人框架:将参数传递给返回 XPath 的关键字
【发布时间】:2018-07-03 13:33:03
【问题描述】:

在我的 RF-Selenium 项目中,我有一个语言选择,有几个不同的选项可供选择,我通过 xpath 找到它们。我通常将我的高级关键字、定位器/全局变量和测试分开在 3 个不同的文件中,所以我需要在一个文件中获取 xpath,而在另一个文件中获取关键字。

我在硬编码时测试和工作的 xpath 如下所示://select[@id="language"]/option[@value="?hl=es"](然后将“es”更改为任何其他语言标识符以找到其他选项)。因此,按照here 的建议,我构建了一个“GET LOCATOR”关键字来将语言标识符作为参数并返回正确的 xpath:

GET LOCATOR
  [Arguments]                         ${language}
  ${option locator}                   Replace String  ${LANG}  placeholder  ${language}
  [Return]                            ${option locator}

我有两个不同的关键字,它们将使用 GET LOCATOR 关键字的返回值:在其中一个关键字中,我验证当前选择的语言在选择列表中被禁用:

  ${current}                          Get Element Attribute  html@lang
  Element Should Be Disabled          GET LOCATOR  ${current}

然后我实际上选择了另一种语言并检查页面是否已切换到它:

  Select From List By Value           ${LANGUAGE SWITCH}  es
  Wait Until Page Contains Element    GET LOCATOR  'es'

所有这些都在 Resources 文件中,而 ${LANGUAGE SWITCH} 和 ${LANG} 变量在不同的文件中(并且 Replace String 关键字在 String RF 标准库中)。

${LANGUAGE SWITCH} 变量包含一个成功定位语言下拉菜单的 css 选择器。我已经做了一些没有 GET LOCATOR 关键字的测试,它们通过了,比如:

${current}                    Get Element Attribute  html@lang
Element Should Be Selected    xpath=//select[@id="language"]/option[@value="?hl=${current}"]

所以我怀疑我的占位符 xpath 存在问题,存储在 ${LANG} 变量中:xpath = //select[@id="language-switch"]/option[@value="?hl=placeholder"]

这是带有语言选择下拉菜单的 DOM 部分:

<select id="language">
    <option value="?hl=ar">Arabic</option>
    <option value="?hl=zh-TW">Chinese (Traditional)</option>
    <option value="?hl=nl">Dutch - Nederlands‎</option>
    <option value="?hl=en" selected="" disabled="">English</option>
    <option value="?hl=el">Greek</option>
    <option value="?hl=es">Spanish‎</option>
</select>

更糟糕的是,使用此关键字的测试失败,没有错误消息,因为我只得到:

| FAIL |
en

那么...我在这里做错了什么?

【问题讨论】:

    标签: selenium xpath robotframework


    【解决方案1】:

    您不能从Element should be disabledWait Until Page Contains Element 调用第二个关键字。发生的事情是Element should be disabled 认为定位器是字符串GET LOCATOR(显然不存在),而自定义错误消息是es

    您需要将其分解为两个步骤:

    ${locator}=  GET LOCATOR  ${current}
    Element should be disabled  ${locator}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2019-06-26
      相关资源
      最近更新 更多