Selenium WEB UI自動(dòng)化測(cè)試支持庫(kù)的安裝及使用

一. 安裝部署

1. 客戶端selenium庫(kù)的安裝

通過(guò)pip安裝selenium庫(kù)的命令:pip install selenium

  • Selenium可支持以下幾種語(yǔ)言:java锻狗、csharp、python、ruby猬膨、php诬烹、js、perl
  • 使用國(guó)內(nèi)鏡像可提升下載速度:pip install selenium -i https://pypi.douban.com/simple/
  • pip安裝出現(xiàn)異常,可嘗試更新至最新版本再試沧踏,更新pip的命令:python -m pip install --upgrade pip

2. 下載對(duì)應(yīng)瀏覽器的ChromeDriver驅(qū)動(dòng):

瀏覽器 下載地址
Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloadshttp://npm.taobao.org/mirrors/chromedriver/
Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/bolg/6900/webdriver-support-in-safari-10/

ChromeDriver驅(qū)動(dòng)版本需與本機(jī)已安裝瀏覽器版本一致,下載前可先查看本機(jī)瀏覽器版本,然后下載正確的ChromeDriver驅(qū)動(dòng)

不清楚如何選擇對(duì)應(yīng)版本請(qǐng)點(diǎn)我
注意事項(xiàng):在使用Selenium編寫(xiě)自動(dòng)化腳本時(shí),需要調(diào)用該ChromeDriver尤泽,因此ChromeDriver驅(qū)動(dòng)存放路徑建議不要出現(xiàn)中文及空格


二.使用Selenium進(jìn)行WEB UI自動(dòng)化測(cè)試

前言

首先,我們得明白Selenium在整個(gè)WEB UI自動(dòng)化測(cè)試中所扮演的角色

  1. 通過(guò)ChromeDriver調(diào)用瀏覽器打開(kāi)需要測(cè)試的站點(diǎn)
  2. 定位要操作的元素
    2.1 通過(guò)ID定位
    2.2 通過(guò)class定位
    2.3 通過(guò)標(biāo)簽名定位
    2.4 通過(guò)xpath定位
  3. 操作已定位到的元素
    3.1 獲取頁(yè)面內(nèi)容
    3.2 向選擇的元素輸入數(shù)據(jù)
    3.3 點(diǎn)擊已定位元素
    3.4 拖拉定位元素
  • 到此處時(shí)欣簇,Selenium的使命就已經(jīng)基本完成,后面處理數(shù)據(jù)及分析數(shù)據(jù)則由python來(lái)完成坯约。

Selenium定位\操作

查找單個(gè)元素并返回元素
from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://music.baidu.com/top/new')
element = driver.find_element_by_id('songListWrapper')    # 根據(jù)ID查找

如果元素未找到則會(huì)拋出異常,如果結(jié)果有多個(gè),也只返回最先找到的那一個(gè)

查找多個(gè)元素并返回元素列表
from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://music.baidu.com/top/new')
tip_to_taihe_box = driver.find_element_by_class_name('tipToTaihe-box')    #查找單個(gè)class元素,如果存在多個(gè)只返回第一個(gè)
span_list = tip_to_taihe_box.find_elements_by_tag_name('span')    #查找多個(gè)span,返回列表

如果元素未找到,會(huì)返回一個(gè)空列表(不會(huì)拋出異常)


查找元素以HTML格式字符串
強(qiáng)制等待
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://www.baidu.com')
sleep(3)               # 強(qiáng)制等待3秒再執(zhí)行下一步
element = driver.find_element_by_id('kw')

注意:強(qiáng)制等待熊咽,其實(shí)就是time.sleep()方法,讓程序暫停運(yùn)行一定時(shí)間闹丐,時(shí)間過(guò)后繼續(xù)運(yùn)行横殴。缺點(diǎn):設(shè)置的時(shí)間太短,元素還沒(méi)有加載出來(lái)同樣會(huì)報(bào)錯(cuò)卿拴。設(shè)置時(shí)間太長(zhǎng)衫仑,浪費(fèi)時(shí)間,如果代碼量大了堕花,就會(huì)影響整體的運(yùn)行速度了文狱,所以盡量少用這個(gè)。

隱式等待
from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.get('http://www.baidu.com')
driver.implicitly_wait(10)      #后面的所有定位元素操作,每半秒進(jìn)行一次,直到查找到元素,最長(zhǎng)等待10秒(可自行定義)
element = driver.find_element_by_id('kw')

注意:隱式等待缘挽,是等待頁(yè)面加載瞄崇,即頁(yè)面加載完成后才能執(zhí)行后面的操作

顯式等待
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome(r'd:\tools\webdriver\chromedriver.exe')
driver.implicitly_wait(10) # 隱式等待和顯性等待可以同時(shí)用,等待的最長(zhǎng)時(shí)間取兩者之中最大的
driver.get('http://www.baidu.com')
try:    
    element = WebDriverWait(driver, 10).until(
                    EC.presence_of_element_located((By.ID, "kw")))
finally:    
    driver.quit()

注意:顯式等待到踏,是等待元素加載杠袱,即元素加載完成后就執(zhí)行對(duì)該元素的操作

使用BeautifulSoup4 & html5lib 配合selenium獲取到的html內(nèi)容進(jìn)行元素定位

使用BeautifulSoup4 & html5lib前必需先通過(guò)CMD安裝這倆個(gè)庫(kù),BeautifulSoup4的具體操作窝稿,可以查看官方操作說(shuō)明文檔 ( Beautiful Soup 4.2.0 操作說(shuō)明文檔傳送門(mén) )

pip install beautifulsoup4    # 安裝BeautifulSoup4庫(kù)
pip install html5lib          # 安裝html5lib庫(kù)

導(dǎo)入BeautifulSoup4 & html5lib

from bs4 import BeautifulSoup
import html5lib

Html5lib如何配合BeautifulSoup4使用

from bs4 import BeautifulSoup
import html5lib
html = """
  <html>
    <head><title>我喜歡的音樂(lè)</title></head>
    <body>
      <p class='title'><b>歌曲TOP3</b></p>
      <p class='story'>以下是音樂(lè)的下載鏈接
      <a  class='music' id='link1'>明智之舉</a>
      <a  class='music' id='link2'>如約而至</a>
      <a  class='music' id='link3'>只要平凡</a>
      這三首TOP3的歌曲你們喜歡嗎楣富?</p>
      <p class='story'>...</p>
    </body>
  </html>
"""
soup = BeautifulSoup(html,'html5lib')    # 將html5lib解釋器添加到BeautifulSoup4中
soup.title           # 獲取html文檔中的title標(biāo)簽元素
soup.title.name      # 獲取html文檔中的title標(biāo)簽元素的name屬性
soup.tltle.text      # 獲取html文檔中的title標(biāo)簽元素的文本內(nèi)容

CSS選擇元素的方法 tag/id/class

CSS選擇器參考手冊(cè)

根據(jù)tag名
p {color:red;}
根據(jù)id名
#food {color:red;}
根據(jù)class
.vergetable {color:red;}
根據(jù)tag名和class組合寫(xiě)(如果多個(gè))
span.vergetable {color:red;}

復(fù)選框選擇( SELECT )

使用SELECT時(shí)需要先導(dǎo)入庫(kù)

from selenium.webdriver.support.ui import Select
Select 模塊(index)定位

通過(guò) select 選項(xiàng)的索引來(lái)定位選擇對(duì)應(yīng)選項(xiàng)(從 0 開(kāi)始計(jì)數(shù)),如選擇第二個(gè)選項(xiàng):select_by_index(1)

<select id="cardid" name="CARD">
  <option selected="" value="A">芯片卡</option>
  <option value="B">磁條卡</option>
</select>
Select 模塊(value)定位

Select 模塊里面除了 index 的方法伴榔,還有一個(gè)方法纹蝴,通過(guò)選項(xiàng)的 value值來(lái)定位。每個(gè)選項(xiàng)踪少,都有對(duì)應(yīng)的 value 值:select_by_value(B)

<select id="cardid" name="CARD">
  <option selected="" value="A">芯片卡</option>
  <option value="B">磁條卡</option>
</select>
Select 模塊(text)定位

直接通過(guò)選項(xiàng)的文本內(nèi)容來(lái)定位塘安,定位“磁條卡”:select_by_visible_text("磁條卡")

<select id="cardid" name="CARD">
  <option selected="" value="A">芯片卡</option>
  <option value="B">磁條卡</option>
</select>
# 導(dǎo)入Select庫(kù)
from selenium.webdriver.support.ui import Select
# 獲取select父元素
s= driver.find_element_by_id('cardid')
# 取消全部選擇
select.deselect_all()
# 選擇指定文本內(nèi)容的復(fù)選框
select(s).select_by_index(1)    #通過(guò)index定位并選擇
select(s).select_by_value(B)    #通過(guò)value定位并選擇
select(s).select_by_visible_text('磁條卡')    #通過(guò)text定位并選擇

select 里面方法除了上面介紹的三種,還有更多的功能如下
select_by_index() :通過(guò)索引定位
select_by_value() :通過(guò) value 值定位
select_by_visible_text() :通過(guò)文本值定位
deselect_all() :取消所有選項(xiàng)
deselect_by_index() :取消對(duì)應(yīng) index 選項(xiàng)
deselect_by_value() :取消對(duì)應(yīng) value 選項(xiàng)
deselect_by_visible_text() :取消對(duì)應(yīng)文本選項(xiàng)
first_selected_option() :返回第一個(gè)選項(xiàng)
all_selected_options() :返回所有的選項(xiàng)

XPath 定位元素方法

特殊定位方法

driver.find_element_by_xpath("http://span[contains(text(),'hello')]")      """text值包含匹配"""
driver.find_element_by_xpath("http://span[text()='新聞']")                 """text值絕對(duì)匹配"""

更多查看:XPath 語(yǔ)法參考手冊(cè)
selenium使用XPath方法定位元素

from selenium import webdriver
driver = webdriver.Chrome(r'd:\tools\chromedriver.exe')
one_element = driver.find_element_by_xpath('//div[@id="myid"]')    # 單個(gè)定位
element_list = driver.find_elements_by_xpath('//div[@class="myclass"]')    # 多個(gè)定位(復(fù)數(shù)形式,返回列表)

end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末援奢,一起剝皮案震驚了整個(gè)濱河市兼犯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖切黔,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砸脊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡纬霞,警方通過(guò)查閱死者的電腦和手機(jī)凌埂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诗芜,“玉大人瞳抓,你說(shuō)我怎么就攤上這事》郑” “怎么了孩哑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)翠桦。 經(jīng)常有香客問(wèn)我臭笆,道長(zhǎng),這世上最難降的妖魔是什么秤掌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮鹰霍,結(jié)果婚禮上闻鉴,老公的妹妹穿的比我還像新娘。我一直安慰自己茂洒,他們只是感情好孟岛,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著督勺,像睡著了一般渠羞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上智哀,一...
    開(kāi)封第一講書(shū)人閱讀 52,682評(píng)論 1 312
  • 那天次询,我揣著相機(jī)與錄音,去河邊找鬼瓷叫。 笑死屯吊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摹菠。 我是一名探鬼主播盒卸,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼次氨!你這毒婦竟也來(lái)了蔽介?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虹蓄,沒(méi)想到半個(gè)月后犀呼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡武花,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年圆凰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片体箕。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡专钉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出累铅,到底是詐尸還是另有隱情跃须,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布娃兽,位于F島的核電站菇民,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏投储。R本人自食惡果不足惜第练,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玛荞。 院中可真熱鬧娇掏,春花似錦、人聲如沸勋眯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)客蹋。三九已至塞蹭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讶坯,已是汗流浹背番电。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辆琅,地道東北人钧舌。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像涎跨,于是被迫代替她去往敵國(guó)和親洼冻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361