我正在尝试验证xpath表达式,如果它是真的,请单击元素。以下是我尝试执行的代码。 Xpath_combined变量返回Boolean:true。请帮我纠正语法或有效表达
可变
${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)]
答案 0 :(得分:0)
您可以创建不同的方案来解决此问题。但是,你可以尝试这个解决方案:
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 ='前缀
${xpath_combined}= Set Variable //body[//div[text()='00:04:56:AC:41:F6'] AND //div[contains(text(),'Device-77')]]
获取匹配的Xpath计数它将返回1次出现的xpath。只有一个body元素传递xpath表达式
${count}= Get Matching Xpath Count ${xpath_combined}
运行关键字如果xpath计数恰好是1次,则页面上会显示元素,您可以单击图标。 注意 :不要忘记将xpath =前缀添加到Click Element定位器
Run keyword if ${count} == 1 Click Element xpath=//i[@class='fa fa-lg fa-file-text-o grow']
答案 1 :(得分:0)
虽然另一种解决方案是完全可行的,但这是一种更普遍的替代方案。
它结合了两个关键字 - Get Webelement
返回一个selenium对象(如果存在),Run Keyword And Return Status
- 如果关键字成功则返回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中。