如果 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.
中的元素
我正在尝试验证 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.