使用 Selenium 和 Robot Framework 遍历 Web 元素

Posted

技术标签:

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

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

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

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

【问题讨论】:

显示您尝试使用的代码示例;如果您没有这些并且不知道从哪里开始,那么用户指南中的“For 循环”部分是一个好的开始 【参考方案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 来解决问题。

以上是关于使用 Selenium 和 Robot Framework 遍历 Web 元素的主要内容,如果未能解决你的问题,请参考以下文章

直接使用 Selenium RC 或 Selenium 与 Robot 框架

使用 Selenium 和 Robot Framework 遍历 Web 元素

robot framework可以返回变量吗

Selenium GRID:并行运行多个 Robot Framework 测试套件

Robot Test Framework + Selenium 的几个坑

python+selenium+Robot