繼上篇《web自動化測試(1):為什麼選擇selenium做自動化測試》,本文介紹如selenium使用
做UI自動化測試,需要什麼技能
- 前端相關技術:HTML、XML、JavaScript、TCP/IP協定等
- 合适的工具選型:比如selenium,比如UTF等;
- 程式設計語言:selenium支援多種語言,java、C++、python、JavaScript等
- 需求分析:項目類型,特質,生命周期,是否适合開展自動化測試等;
如果隻是做UI差異與還原度對比,用不着selenium大駕,phantomjs截圖對比就好,推薦一個基于dom diff算法UI監控工具:page-monitor
本來準備萬字長文,好好嗑叨一番,但是,覺得實在務必要。官網的介紹都很細:https://selenium.dev/documentation/en/,中文把en改為zh-cn即可:https://selenium.dev/documentation/zh-cn/
慕課網教程:Java Web自動化測試 Selenium基礎到企業實際應用 https://coding.imooc.com/class/359.html
selenium現在官網分為三件套:
- Selenium IDE:是嵌入到浏覽器的插件(目前僅支援chrome、Firefox),錄制和回放Selenium腳本,錄制好的腳本轉換成各種Selenium WebDriver支援的程式語言,進而擴充到更廣泛的浏覽器類型;
- Selenium WebDriver:可支援多種語言,用于操作浏覽器的一套API;支援各類型浏覽器,跨作業系統;
- Selenium Grid:用于遠端控制、分布式部署等,均可實作Selenium腳本的高效執行與拓展;使得自動化測試可以并行運作,甚至在跨平台、異構的環境中運作,包括主流的移動端環境,如Android、iOS
Selenium IDE操作指北
關鍵是chrome由于偉大的牆存在,下載下傳不了chrome Selenium IDE擴充插件,如有需要,去本人的收集清單看看《Chrome擴充程式導出備份與本地導入浏覽器 》
首先是Selenium IDE錄制頁面操作腳本,這個其實不做測試,平時玩着也蠻有趣的,操作如下
1、點選Selenium IDE插件,彈出界面,建立工程,輸入測試用例名,點選ok,打開一個新視窗,(後面預設開始錄制,你所有的操作沒有按停止前,都是在錄制轉态)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwIzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL0EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5CN2UWOwUWYiF2YwYWZhRTM4YTZkFzMzgzYkVjMwkjZl9CX2IzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL3M3Lc9CX6MHc0RHaiojIsJye.jpeg)
2、再次點選,Selenium IDE插件,彈出界面,關閉錄制按鈕
3、操作界面。
這裡的圖很草。其實可以随便玩。像小孩子玩手機一樣,左monkey測試,點多了自然會了
WebDriver操作
Selenium 的核心是 WebDriver,這是一個編寫指令集的接口,可以在許多浏覽器中互換運作。
它允許使用者模拟終端使用者執行的常見活動;雖然 Selenium 主要用于網站的前端測試,但其核心是浏覽器使用者代理庫。
webDrive直接下即可,https://selenium.dev/downloads/,前端,npm i selenium-webdriver
接着就是編寫腳本,也可以從上面Selenium IDE
// 不管是java 還是python,都是需要導入webdriver包
// 庫下載下傳 https://selenium.dev/documentation/zh-cn/selenium_installation/installing_selenium_libraries/
const {Builder, By, Key, until} = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
try {
// 控制浏覽器:https://selenium.dev/documentation/zh-cn/webdriver/browser_manipulation/
// 打開浏覽器,WebDriver通常可以說有一個阻塞API。web平台本質上是異步的,是以WebDriver不跟蹤DOM的實時活動狀态。
await driver.get('https://www.zhoulujun.cn/search.html?m=search&c=index&a=init&siteid=1&typeid=1&ajax=1&q=tar');
// 找到搜尋框(也可以 By.id('bdcsMain')),輸入test,回車。
await driver.findElement(By.name('q')).sendKeys('test', Key.ENTER);
// 搜尋頁面,找到
let firstResult = await driver.wait(until.elementLocated(By.css('h3>div')), 10000);
console.log(await firstResult.getAttribute('textContent'));
// 關閉浏覽器
browser.close()
}
finally{
driver.quit();
}
})();
webDrive庫的安裝:https://selenium.dev/documentation/zh-cn/selenium_installation/installing_selenium_libraries/
webDrive驅動安裝:https://selenium.dev/documentation/zh-cn/selenium_installation/installing_webdriver_binaries/
如果不安裝驅動,就會報錯:The ChromeDriver could not be found on the current PATH. Please download the latest version of the
chrome驅動如下:http://chromedriver.storage.googleapis.com/80.0.3987.106/chromedriver_win32.zip
查找web元素,是selenium測試的重點,https://selenium.dev/documentation/zh-cn/webdriver/web_element/
查找元素的九種方法
By查找
- By.id
- By.name
- By.tagName
- By.className
- By.xpath //常用
- By.css("#kw")
- By.partialLinkText //模糊比對
- By.linkText("糯米") eg:<a>糯米<a/>
其實也就是我們常見的 css jquery 元素選擇器而已。
browser查找
browser.find_element_by_css_selector('.logo')
這個去查API,或者查找browser方法
操作頁面元素的方法
擷取元素後,可以對頁面元素執行相應的動作
input.clear()
input.send_keys('zhoulujun',Key.ENTER)
input.click()
在頁面執行JavaScript
也可以寫js執行
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')
Selenium Grid
Grid服務網格, 一台伺服器作為轉發器(hub)将JSON格式的測試指令轉發到1台或多台注冊的節點。 測試任務通過跟轉發器(hub)的互動來操作遠端浏覽器執行個體。 轉發器(hub)維護了一個可供使用的注冊伺服器清單,也允許我們通過轉發器(hub)來控制這些執行個體。允許我們在多台節點伺服器上并行執行測試, 同時也中心化的管理多個浏覽器版本,多種浏覽器的配置。(以替代傳統的基于個人的測試)
按照官方的說法,下載下傳 selenium-server-standalone JAR 檔案,然後放在Tomcat起個服務就可。具體怎麼配置,有空了再來寫一篇。
同行文章推薦: