在机器人中找不到名称'Get Child WebElement'关键字



我想从当前页面获取所有子元素,为此我使用了以下代码

${childElements} =  Get Child WebElement    xpath=//*

上面的代码抛出一个错误No关键字名称为"Get-Child WebElement">

还有其他图书馆可以用吗?

正如您所发现的,这些关键字还没有出现在已发布的SeleniumLibrary版本中。

如果您正在处理一个元素或只是有一个字符串定位器,那么您可以在自定义SeleniumLibrary扩展中使用@yash的回答中提到的SeleniumLibraryPullRequest#702中建议的代码。

在下面的例子中,有两个自定义的Robot Framework关键字,使用#702中提到的方法为您提供关键字:

  1. 获取子Webelements
  2. 获取父Webelement

在下面的示例中,它显示您可以使用常规定位器id=main或WebElement${children[0]}来查找父级和子级。这是由WebElementpython对象的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>>

使用这种方法的局限性在于,不能有两种不同的选择器类型作为父/子。

最新更新