【问题标题】:Find if next sibling exist查找下一个兄弟是否存在
【发布时间】:2021-03-20 05:07:24
【问题描述】:

我尝试编写一些机器人测试用例,但卡住了。我需要从页面中提取一些链接。链接存储在<li> 标记内,该标记也在<ul> 内。问题是,在我提取第一个链接后,我需要转到下一个 <li>(第一个 <li> 下一个兄弟姐妹),但我如何才能找到是否有下一个兄弟姐妹而不出现错误或应用程序停止。我知道,我可以使用 Element Should Contain 关键字,但如果它不包含我会收到错误消息。
我想做这样的事情:

if next sibling exist  do something
else go do something else

html 应该如下所示。

<ul id="top_menu" role="menubar" class="">
    <li class="menu_accordion_section" id="cat_1">
        <a href="some-exampe"> </a>
    </li>
    <li class="menu_accordion_section" id="cat_2">
        <a href="some-exampe"> </a>
    </li>
</ul>

【问题讨论】:

    标签: selenium selenium-webdriver robotframework


    【解决方案1】:

    有直接消息,可以使用执行脚本创建变量。

    所以我创建了一个关键字

      Validate child element exists
    

    它需要两个参数 parent(Webelement) 和 child(Xpath) 在 parent 中搜索 child。

      Validate child element exists    ${parent}    ./h3
    

    假设父 xpath 为://ul[@id="top_menu"],上面的代码将搜索相等的 xpath //ul[@id="top_menu"]/./h3 注意 taht 上下文是父而不是根

    所以这将等于 xpath

    *** Test Cases ***
    Google Search
        [Tags]    you    probably    do    not    have    this    many    tags    in    real    life
        Wait Until Element Is Visible  CSS=[id="introduction-container"]
        ${parent}=    Get webelement    xpath=//*[@id="introduction-container"]
        ${result}=    Validate child element exists    ${parent}    ./h3   
        Should Be True     ${result}
    
        
    *** Keywords ***
    Validate child element exists 
        [Arguments]    ${parent}   ${child} 
        ${child}=    Execute Javascript    return window.document.evaluate( arguments[1], arguments[0], null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;     ARGUMENTS    ${parent}    ${child}
        [Return]    ${child}
    

    【讨论】:

    • 你能解释一下这条线在做什么${child}= Execute Javascript return window.document.evaluate( arguments[1], arguments[0], null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue; ARGUMENTS ${parent} ${child}
    • docuemnt.evaluate 是在浏览器 javascript 引擎中使用 xpath 查找元素的方法
    • 这个链接解释了它需要的不同参数,简而言之,它以父节点为参考检查xpath
    • 关键字返回它找到的第一个子元素
    【解决方案2】:

    一种解决方案是遍历菜单,遵循代码示例(此代码未经测试,可能需要一些调整):

    List<WebElement> menuItens = getDriver().findElement(By.id("top_menu")).findElements(By.tagName("li"));
    List<String> links = new ArrayList<>();
    menuItens.forEach(item -> {
        links.add(item.findElement(By.tagName("a")).getAttribute("href"));
    });
    return links;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-16
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 2010-12-22
      相关资源
      最近更新 更多