我想从当前页面获取所有子元素,为此我使用了以下代码
${childElements} = Get Child WebElement xpath=//*
上面的代码抛出一个错误No关键字名称为"Get-Child WebElement">
还有其他图书馆可以用吗?
正如您所发现的,这些关键字还没有出现在已发布的SeleniumLibrary版本中。
如果您正在处理一个元素或只是有一个字符串定位器,那么您可以在自定义SeleniumLibrary扩展中使用@yash的回答中提到的SeleniumLibraryPullRequest#702中建议的代码。
在下面的例子中,有两个自定义的Robot Framework关键字,使用#702中提到的方法为您提供关键字:
- 获取子Webelements
- 获取父Webelement
在下面的示例中,它显示您可以使用常规定位器id=main
或WebElement${children[0]}
来查找父级和子级。这是由WebElement
python对象的python方法find_element(s)
处理的。
注意:出于安全和可读性的考虑,将关键字从Evaluate
更改为Call Method
。
示例。机器人
*** Settings ***
Library SeleniumLibrary
Suite Teardown Close All Browsers
*** Test Cases ***
Get Children Then Parent
Open Browser http://www.google.com headlesschrome
${children} Get Child Webelements id=main
${parent} Get Parent Webelement ${children[0]}
${id} Get Element Attribute ${parent} id
Should Be Equal ${id} main
*** Keywords ***
Get Child Webelements
[Arguments] ${locator}
${element} Get WebElement ${locator}
${children} Call Method
... ${element}
... find_elements
... by=xpath value=child::*
[Return] ${children}
Get Parent Webelement
[Arguments] ${locator}
${element} Get WebElement ${locator}
${parent} Call Method
... ${element}
... find_element
... by=xpath value=parent::*
[Return] ${parent}
有PR#702为同一个引发。围绕这一点,目前正在进行一些讨论。由于目前还没有任何ETA/结论。同时,您可以通过您的标识符控制所有事情。
类似于如果您想要子元素,您的标识符将是:-In case of css:- <<parent identifier > child >>
In case of xpath:- <<parent identifier/child>>
使用这种方法的局限性在于,不能有两种不同的选择器类型作为父/子。