【自动化测试爬虫系列】Selenium Webdriver 介绍
一.?Selenium Webdriver技術(shù)介紹
1.?簡(jiǎn)介
selenium Webdriver是一套針對(duì)不同瀏覽器而開(kāi)發(fā)的web應(yīng)用自動(dòng)化測(cè)試代碼庫(kù)。使用這套庫(kù)可以進(jìn)行頁(yè)面的交互操作,并且可以重復(fù)地在不同瀏覽器上進(jìn)行各種測(cè)試操作。
以python為例,在cmd輸入python-m pip install?selenium?--upgrade pip進(jìn)行安裝。
2.?特點(diǎn)
開(kāi)源免費(fèi)
支持多種語(yǔ)言:Java、Python、Ruby、C#、JavaScript、C++等。
直接讓測(cè)試工具調(diào)用瀏覽器和操作系統(tǒng)本身提供的內(nèi)置方法,以此繞過(guò)JavaScript環(huán)境的沙盒限制。
支持多種瀏覽器。包括:Chrome、ie6-11、Firefox大部分版本、Mac操作系統(tǒng)的Safari默認(rèn)版本、Opera、HtmlUnit、Android手機(jī)操作系統(tǒng)的默認(rèn)瀏覽器、iOS手機(jī)操作系統(tǒng)的默認(rèn)瀏覽器。
3.?實(shí)現(xiàn)原理
如圖,測(cè)試腳本作為客戶(hù)端,在運(yùn)行腳本的時(shí)候,
調(diào)用瀏覽器各自的webdriver(如Firefox的geckodriver)并創(chuàng)建session
webdriver啟動(dòng)瀏覽器,并綁定某端口成為Webdriver的Remote Server(作為服務(wù)端)
測(cè)試腳本發(fā)送基于selenium自己設(shè)計(jì)的The WebDriverWire Protocol協(xié)議的命令請(qǐng)求到Remote Server(這套協(xié)議幾乎可以操作瀏覽器做任何事情,如打開(kāi)、關(guān)閉、最大化、最小化、元素定位、元素點(diǎn)擊、上傳文件等。)
Remote Server將Web Service的命令轉(zhuǎn)化成瀏覽器native的調(diào)用,在瀏覽器中找到元素的坐標(biāo)位置,并在這個(gè)坐標(biāo)點(diǎn)觸發(fā)一個(gè)鼠標(biāo)或鍵盤(pán)操作,從而操作瀏覽器。
4.?基本的元素定位方式
根據(jù)上述的實(shí)現(xiàn)原理,可知用selenium對(duì)瀏覽器進(jìn)行頁(yè)面操作的關(guān)鍵就是定位出頁(yè)面上相應(yīng)的元素,然后發(fā)送基于selenium自己設(shè)計(jì)的The WebDriver Wire Protocol協(xié)議的命令請(qǐng)求。
瀏覽器中,按F12或者各個(gè)瀏覽器提供的開(kāi)發(fā)者工具,可查看頁(yè)面元素。
Selenium提供了八種定位方式:
--id定位?
§用法:find_element_by_id(“id對(duì)應(yīng)的值”)
--name定位?
§用法:find_element_by_name(“name對(duì)應(yīng)的值”)
--class定位
§用法:find_element_by_class_name(“class對(duì)應(yīng)的值”)
--tag定位
§用法:find_element_by_tag_name(“tag對(duì)應(yīng)的值”)
--link定位(用于定位文本鏈接)
§用法:find_element_by_link_text(“鏈接的文本內(nèi)容”)
--partial link定位(link定位的補(bǔ)充,可取鏈接部分文本內(nèi)容進(jìn)行定位)
§用法:find_element_by_partial_link_text(“鏈接的部分文本內(nèi)容”)
--XPath定位
§用法:find_element_by_xpath(“xpath的值,可選中元素后,鼠標(biāo)右鍵復(fù)制xpath”)
--CSS定位
§用法:find_element_by_css_selector(“CSS路徑,同樣可選中元素后,鼠標(biāo)右鍵復(fù)制CSS路徑”)
還可以用By定位元素(其實(shí)就是8種定位方法的另一種較靈活的寫(xiě)法):
--統(tǒng)一調(diào)用find_element()方法,通過(guò)By來(lái)聲明定位方法(前面提到的8中定位方法),并傳入對(duì)應(yīng)定位方法的定位參數(shù)。
§用法:find_element(By.定位方法,“定位參數(shù)”)
e.g.?find_element(By.ID,“txtAcc”)
?
二. Linux服務(wù)器環(huán)境部署注意事項(xiàng)
桌面環(huán)境使用Selenium默認(rèn)會(huì)打開(kāi)瀏覽器界面,但是如果要部署到無(wú)桌面環(huán)境的服務(wù)器環(huán)境,使用普通方法沒(méi)法運(yùn)行Selenium。解決方法有:
使用HtmlUnitDriver或者PhantomJSDriver
使用XVFB(X virtual frame buffer)虛擬顯示服務(wù)器,不需要借助任何顯示設(shè)備,在內(nèi)存中執(zhí)行所有的圖形操作。
本文采用安裝Xvfb的方式。部署步驟如下:
1. 安裝pyvirtualdisplay
pip install pyvirtualdisplay
2. 安裝Xvfb(作為后端)
yum install xorg-x11-server-Xvfb
3. 安裝Firefox
cd /usr/local
Wget https://ftp.mozilla.org/pub/firefox/releases/56.0.2/linux-x86_64/en-US/firefox-56.0.2.tar.bz2
tar xjvf firefox-56.0.2.tar.bz2
ln -s /usr/local/firefox/firefox /usr/bin/firefox
4. 下載geckodriver
wget https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-linux64.tar.gz
5. 解壓geckodriver-v0.19.1-linux64.tar.gz
tar xvzf geckodriver-*.tar.gz
6. 在環(huán)境變量目錄/usr/bin/中添加geckodriver的硬鏈接
ln -s /usr/local/geckodriver /usr/bin/geckodriver
7. 測(cè)試腳本中添加代碼
導(dǎo)入Display模塊
from pyvirtualdisplay import Display?
在創(chuàng)建webdriver實(shí)例前,設(shè)置Display環(huán)境變量。visible傳0表示使用Xvfb作為后端,size傳的參數(shù)就是設(shè)置瀏覽器頁(yè)面大小。
Display = Display(visible=0, size=(1280, 1024))?
啟動(dòng)虛擬顯示服務(wù)
Display.start()?
執(zhí)行完用例后,關(guān)閉瀏覽器后,也需要終止Xvfb進(jìn)程。
display.sendstop() # 先發(fā)送SIGTERM信號(hào)給Xvfb,讓Xvfb自行了斷,如果Xvfb進(jìn)程還在,則繼續(xù)發(fā)送SIGKILL強(qiáng)制結(jié)束Xvfb進(jìn)程。
部署時(shí)可能遇到的坑:
1. 運(yùn)行webdriver.Firefox()后等待很久報(bào)錯(cuò)并退出,顯示selenium.common.exceptions.WebDriverException: Message: other os error:
可能是版本不兼容,可以把firefox,geckodriver以及selenium全部升級(jí)到新版本。
總結(jié)
以上是生活随笔為你收集整理的【自动化测试爬虫系列】Selenium Webdriver 介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【干货特供】dotNet core 应用
- 下一篇: 远离盛行道德绑架的团队