如果xpath匹配,需要有关Run Keyword的帮助,然后单击element

时间:2016-05-16 07:18:49

标签: selenium robotframework selenium2library

我正在尝试验证xpath表达式,如果它是真的,请单击元素。以下是我尝试执行的代码。 Xpath_combined变量返回Boolean:true。请帮我纠正语法或有效表达

enter image description here

可变

${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)]

2 个答案:

答案 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中。