系列資源:
- Selenium系列教程-01 環境配置
- Selenium系列教程-02 使用Chrome開發者工具
- Selenium系列教程-03 使用開發者工具進行元素定位
- Selenium系列教程-04 常用的元素定位方法
- Selenium系列教程-05 findElements 方法詳解
- Selenium系列教程-06 圖片上傳以及Web Element常用操作方法
- Selenium系列教程-07 使用Actions類模擬複雜操作
- Selenium系列教程-08 瀏覽器本身行為控制
- Selenium系列教程-09 如何切換iframe
- Selenium系列教程-10 如何執行JavaScript方法
主要內容
- findElements方法簡介
- findElement與findElements對比
- findElements的使用場景
findElements 方法簡介
在之前的元素定位章節中我們定位頁面元素的方式都是使用 driver.findElement() 這樣的方式來定位元素。常用操作如下:
driver.findElement({id:xxxxxxxx})
複製程式碼
在selenium-webdriver 中,findElement方法返回的為單個元素,findElements方法返回具有某一特徵的所有元素集合。以百度首頁為例:
我們可以看到導航欄,6個不同的超連結它們的class 屬性相同,如果我們要一次獲取這6個元素的話,我們就可以使用findElements方法來獲取。node.js程式碼如下:
require('chromedriver')
const { Builder } = require('selenium-webdriver')
let driver = new Builder().forBrowser('chrome').build()
driver.get('http://www.baidu.com')
//使用findElements 方法
driver.findElements({className:'mnav'}).then((eles)=>{
for(let ele of eles){
ele.getText().then((text)=>{
console.log("text:",text)
})
}})
複製程式碼
執行結果:
text: 新聞
text: hao123
text: 地圖
text: 視訊
text: 貼吧
text: 學術
複製程式碼
findElement與findElements方法的對比
我們通過以上的例子可以知道呼叫findElement返回單個元素,findElements返回為符合某一特徵的多個元素的集合。我們可以通過使用 id ,className ,css ,xpath ,name ,linkText ,linkText partialLinkText tagName 這8種方法來定位元素。我們知道,web頁面中元素有id屬性的時候,代表這個元素在整個頁面中就是唯一的。所以,在使使用findElements方法查詢多個元素的時候,我們通常不會使用id屬性來獲取多個元素。所以,在使用findElements 方法的時候,通常不會用到元素的id屬性,而其它7中定位方式都可以通用。以下簡單的表格比較:
方法名 | findElement | findElenents |
---|---|---|
解釋 | 查詢Web頁面中符合特徵的某個元素 | 返回Web頁面中符合某類特徵的多個元素 |
支援的元素定位方式 | id ,className ,css ,xpath ,name , linkText ,linkText , partialLinkText , tagName |
className ,css ,xpath ,name ,linkText ,linkText ,partialLinkText ,tagName |
findElements 一般使用場景
我們知道,在web自動化測試過程,我們使用到最多的方法為findElement去操作單個元素。那麼findElements的使用場景有哪些呢?
- 導航欄頁面元素
在web設計上,前端工程師一般會使用相同的樣式檔案來定義導航欄中的元素,當我們需要對導航欄上的文字是否顯示正確的時候,我們就可以使用findElements方法定位所有元素,如上面例子中對百度的操作。
- 頁面中具有某一特徵的所有元素
在某些列表中,我們統計列表中的元素有多少個,或者獲取每個列表元素。例如,電商網站中常見的商品列表。 以上是一些常用到的場景,當然,根據我們系統的業務不同,針對不同場景,大家可以自行再總結。
獲取更多資訊,可以關注公眾號,也可以加QQ群:707467292 進行node.js自動化相關技術交流。