【发布时间】: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