在机器人中找不到名称为“ Get Child WebElement”的关键字

时间:2018-12-13 11:59:49

标签: python-2.7 robotframework

我想从当前页面获取所有子元素,因为我正在使用下面的代码

IJob

上面的代码引发错误No关键字,名称为'Get Child WebElement'

还有其他库可以工作吗?

2 个答案:

答案 0 :(得分:2)

您已经发现这些关键字尚未在已发布的SeleniumLibrary版本中。

如果您正在处理元素或仅具有字符串定位符,则可以在自定义SeleniumLibrary扩展名中@yash答案中提到的SelenniumLibrary Pull Request #702中使用建议的代码。

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

  1. 获取儿童网络元素
  2. 获取父级网络元素

在以下示例中,它显示您可以使用常规定位符id=main或WebElement ${children[0]}查找父级和子级。这是由find_element(s) python对象的python方法WebElement处理的。

注意:出于安全性和可读性考虑,将关键字从Evaluate更改为Call Method

example.robot

*** 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}  

答案 1 :(得分:0)

为此提出了PR #702。关于这一点,正在进行一些讨论。 由于目前尚无任何ETA /结论。同时,您可以通过标识符控制所有内容。

就像您想要子元素一样,您的标识符将是:-
In case of css:- <<parent identifier > child >>
In case of xpath:- <<parent identifier/child>>

使用此方法存在局限性,因为您不能有2种不同的选择器类型作为父/子。