如果 xpath 匹配然后单击元素,则需要有关 运行 关键字的帮助

Need help regarding Run Keyword if xpath matches and then click element

我正在尝试验证 xpath 表达式,如果它是真的,请单击元素。以下是我正在尝试执行的代码。 Xpath_combined 变量 returns 布尔值:真。请帮助我更正语法或有效表达式

变量

${xpath_combined}       //div[text()='00:04:56:AC:41:F6'] AND //div[contains(text(),'Device-77')]

关键字

Run keyword if  ${xpath_combined} == "true" Click Element   //i[@class='fa fa-lg fa-file-text-o grow']

控制台输出错误

Evaluating expression '//div\[text()='00:04:56:AC:41:F6'\] AND //div\[contains(text(),'Gambit-77')\] == "true"' failed: SyntaxError: invalid syntax (<string>, line 1)]

您可以创建不同的场景来解决这个问题。但是,您可以试试这个解决方案:

Xpath = 使用 xpath,找到包含两个元素的父元素。但这取决于你的代码结构f.e。尝试查找 body 元素,其中两个子元素包含特定的文本条件:

xpath=//body[//div[text()='00:04:56:AC:41:F6'] AND //div[contains(text(),'Device-77')]]

以正确的方式设置变量 或使用标量。 注意:我们将使用Get Matching Xpath Keyword,所以我们不需要使用'xpath=' prefix

${xpath_combined}=    Set Variable    //body[//div[text()='00:04:56:AC:41:F6'] AND //div[contains(text(),'Device-77')]]

获取匹配的 Xpath 计数 它将 return 出现 1 次 xpath。只有一个 body 元素通过了 xpath 表达式

${count}=    Get Matching Xpath Count    ${xpath_combined} 

运行 关键字 If 如果 xpath 计数恰好为 1 次,则元素出现在页面上,您可以单击图标。 注意:不要忘记为点击元素定位器添加 xpath= 前缀

Run keyword if    ${count} == 1    Click Element    xpath=//i[@class='fa fa-lg fa-file-text-o grow']

虽然另一个解决方案完全可行,但这里有一个更通用的替代方案。

它结合了两个关键字 - Get Webelement 其中 returns 一个 selenium 对象(如果它存在)和 Run Keyword And Return Status - returns True 如果一个关键字成功, False 否则:

${locator}=    Set Variable   //body[//div[text()='00:04:56:AC:41:F6'] AND //div[contains(text(),'Device-77')]]
${target}=     Set Variable   //i[@class='fa fa-lg fa-file-text-o grow']
${the element is present}=    Run Keyword And Return Status    Get Webelement  ${locator}

Run Keyword If    ${the element is present}    Click Element    ${target}

另一个好处是您不受 xpath 定位器的限制 - 它可以与 css、id 或任何其他策略一起使用。

或者,可以使用 Element Should Be Visible 而不是 Get Webelement,但这仅适用于实际可见的元素,而不仅仅是出现在 DOM.

中的元素