使用 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 元素
Selenium GRID:并行运行多个 Robot Framework 测试套件