selenium - 机器人框架: passing argument to a keyword that returns an XPath

标签 selenium xpath robotframework

在我的 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'

所有这些都位于资源文件中,而 ${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}"]

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

这是带有语言选择下拉列表的 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

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

最佳答案

您不能从应禁用元素等待页面包含元素调用第二个关键字。发生的情况是 Element should be disabled 认为定位器是字符串 GET LOCATOR (显然不存在),并且自定义错误消息是 es .

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

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

关于selenium - 机器人框架: passing argument to a keyword that returns an XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423603/

相关文章:

javascript - 邮件监听器偶尔无法通过身份验证

python - 没有弹出窗口的 Webdriver

java - Node.getNodeValue() 在 java 中返回 null

python-3.x - 如何从以下html中提取数据?

robotframework - 在robotframework中乘以变量

selenium - 使用 Appium 尝试触摸操作时出错

java - 收到错误 - java.lang.ClassCastException : org. openqa.selenium.chrome.ChromeDriver 无法转换为 com.initialization.DriverInitialization

robotframework - 在 Robot Framework 中解析 bool 值

java - Selenium 无效 XPath 错误

testing - "Generate Random String"Robot Framework 字符串库中用于赋值给变量的关键字