【问题标题】:Iterate through web elements with Selenium and Robot Framework使用 Selenium 和 Robot Framework 遍历 Web 元素
【发布时间】:2019-05-15 00:51:33
【问题描述】:

在网页上有许多具有相同跨度类名称的元素。 而且我可以使用关键字获取第一个元素的值 “获取文本类:...”。

但我就是不知道如何迭代并获取所有这些相同跨度类名称的值。有什么想法吗?

我知道如何迭代,例如使用 Python 编写的文本文件,但我对 Selenium 和 RFW 还不够熟悉。

【问题讨论】:

  • 显示您尝试使用的代码示例;如果您没有这些并且不知道从哪里开始,那么用户指南中的“For 循环”部分是一个好的开始

标签: loops selenium robotframework


【解决方案1】:

您可以使用Get WebElements 关键字获取所有具有相同类的Web 元素,然后您可以使用for 循环对其进行迭代。请注意,我使用的是RF 3.1 new for syntax。您可以使用extended variable syntax 访问文本属性。

${elements}=    Get WebElements    //span[@class='myclass']
FOR    ${element}    IN    @{elements}
    Log    ${element.text}
END

其他选项是在循环中使用Get Text 关键字,您可以将网络元素变量作为定位器传递。

${elements}=    Get WebElements    //span[@class='myclass']
FOR    ${element}    IN    @{elements}
    ${text}=    Get Text    ${element}
    Log    ${text}
END

【讨论】:

    【解决方案2】:

    这是您可以尝试遍历所有元素的解决方案。 但如果您只想获取第一个元素,那么您可以创建 xpath,然后添加 (your xpath)[1] 以获取第一个元素。同样有:nth-childOf()。阅读更多here

    xpath=<<your identifier>>
    ${all_ele_count}=    Get Matching Xpath Count    xpath=<<your identifier>>
    Log    ${all_ele_count}
    : FOR    ${INDEX}    IN RANGE    1    ${all_ele_count}
    \    Log    ${INDEX}
    \    ${currUrl}    get location
    \    click element    xpath=(<<your identifier>>)>1])[1]
    \    do processing here
    \    go to    ${currUrl}
    

    【讨论】:

    • 这意味着为每个元素单独调用浏览器。虽然它在技术上可行,但我认为这是一种非常缓慢的方法。使用Get Webelements 方法获取内存中的所有元素,因此只需要与浏览器进行一次交互。
    【解决方案3】:

    您还可以在 arraylist 中使用 span 类获取所有元素并对其进行迭代。 例如:

    ArrayList<WebElement> list = new ArrayList<WebElement>();
    list.add(driver.findElements(By.class("")));
    for(int i=0; i<list.size(); i++)
    {
    //select the element which is needed
    }
    

    我希望这行得通

    【讨论】:

    • OP 似乎有兴趣使用 Robot FW 而不是 java 来解决问题。
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多