一、Selenium簡介
selenium 安裝
線上安裝:cmd→pip install selenium(之前要安裝pip easy_install pip)
離線安裝:下載下傳selenium安裝包,然後解壓,在cmd中進入到解壓的檔案中,再運作:python setup.py install
webdriver 安裝
Chromedriver:下載下傳位址
Firefoxdriver:下載下傳位址
下載下傳的webdriver版本與你的浏覽器版本有關,請注意下載下傳
可以将下載下傳的webdriver檔案放在python.exe的同級目錄上,這樣在環境配置的時候僅需配置python的環境配置
selenium 特點
直接在web頁面上執行,模拟操作
支援Windows、Linux和Mac平台
背後有Google維護源代碼
支援目前大部分主流浏覽器
支援主流的程式設計語言,包括:Java、Python、C#、PHP、Ruby、JavaScript
基于标準的WebDriver文法規範
基于JavaScript的自動化引擎
selenium 元件
Selenium IDE:一個Firefox插件,可以錄制使用者的基本操作,生成測試用例。随後可以運作這些測試用例在浏覽器裡回放,可将測試用例轉換為其他語言的自動化腳本。
Selenium Remote Control (RC):支援多種平台(Windows,Linux,Solaris)和多種浏覽器(IE,Firefox,Opera,Safari),可以用多種語言(Java,Ruby,Python,Perl,PHP,C#)編寫測試用例。
Selenium Grid :允許Selenium-RC 針對規模龐大的測試案例集或者需要在不同環境中運作的測試案例集進行擴充
selenium 業務原理
selenium原理涉及三個部分,分别是
浏覽器
driver
client(代碼)
lient其實并不知道如何操作浏覽器,但是driver知道,在selenium啟動以後,driver充當了伺服器的角色,跟client和浏覽器通信,client根據webdriver協定發送請求給driver,driver解析請求,并在浏覽器上執行相應的操作,并把執行結果傳回給client。
webdriver協定本身就是http協定,資料傳輸使用json格式。
selenium 工作原理
1.編寫每一條selenium腳本,建立一個http請求發送給浏覽器的驅動
2.浏覽器驅動使用http server接受請求
3.http server接受請求後根據請求來具體操作對應的浏覽器
4.浏覽器執行操作
5.浏覽器傳回執行結果給http server
6.http server又将結果傳回給selenium腳本
使用http協定的原因:因為HTTP協定是一個浏覽器和Web伺服器之間通信的标準協定,而幾乎每一種程式設計語言都提供了豐富的http libraries,這樣就可以友善的處理用戶端Client和伺服器Server之間的請求request及響應response,WebDriver的結構中就是典型的C/S結構,WebDriver API相當于是用戶端,而小小的浏覽器驅動才是伺服器端。
相容多種語言的原因:JSON Wire protrol是Webdriver的基礎協定。JSON Wire protocol是在http協定基礎上,對http請求及相應的body部分的資料進行進一步規範。http請求和響應包含部分包括,http請求方法、http請求、響應内容body及http響應等。
常見的http請求方法:
GET:用來從伺服器擷取資訊。比如擷取網頁的标題資訊
POST:向伺服器發送操作請求。比如findElement,Click等
http響應狀态碼:
在WebDriver中為了給使用者以更明确的回報資訊,提供了更細化的http響應狀态碼,比如:

http請求及響應的body部分:
body部分主要傳送具體的資料,在WebDriver中這些資料都是以JSON的形式存在并進行傳送的,這就是JSON Wire protocol。
JSON是一種資料交換的格式,是對XML的更新與替代,下面是一個JSON檔案的例子:
下面的例子是WebDriver中在成功找到一個元素後JSON Wire Protocol的傳回:
{“status” : 0, “value” : {“element” : “123422”}}
是以在Client和Server之間,隻要是基于JSON Wire Protocol來傳遞資料,就與具體的腳本語言無關了,這樣同一個浏覽器的驅動就即可以處理Java語言的腳本,也可以處理Python語言的腳本了。
二、基礎文法
參考文獻:selenium教程
定位标簽方法(8種)
單個元素定位 多個元素定位 含義
find_element_by_id(“id”) find_elements_by_id(“id”) 通過id查找對應的元素
find_element_by_name(‘name’) find_elements_by_name(‘name’) 通過name查找對應的元素
find_element_by_tag_name(‘name’) find_elements_by_tag_name(‘name’) 通過标簽查找對應元素
find_element_by_class_name(‘classname’) find_elements_by_class_name(‘classname’) 通過class屬性來查找到對應的元素
find_element_by_css_selector(‘css’) find_elements_by_css_selector(‘css’) 通過css選擇器查找對應的元素
find_element_by_partial_link_text(‘linktext’) find_elements_by_partial_link_text(‘linktext’) 通過部分連結定位
find_element_by_link_text(‘linktext’) find_elements_by_link_text(‘linktext’) 通過完整超連結定位
find_element_by_xpath(‘xpath’) find_elements_by_xpath(‘xpath’) 通過xpath來查找對應的元素
在這些定位方法中比較推薦xpath 的定位方法,xapth表達式可以更精準、更靈活的定位到我們想要的元素 xpath學習
WebDriver常用方法
表達式 操作
title() 擷取title标簽 ,或者使用title屬性
get(url) get方式請求url
get_attribute(name) 擷取屬性值
back() 浏覽器後退
forawrd() 浏覽器前進
close() 關閉目前頁面
refresh() 重新整理浏覽器
quit() 關閉浏覽器
maximize_window() 浏覽器最大化
minimize_window() 浏覽器最小化
click() 滑鼠左鍵單擊
clear() 清除内容
send_keys(key) 輸入内容
switch_to.window 切換頁面句柄
switch_to.frame 切換iframe
switch_to.alert 切換彈窗