Selenium(Python web測(cè)試工具)基本用法詳解
本文實(shí)例講述了Selenium基本用法。分享給大家供大家參考,具體如下:
Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個(gè)工具的主要功能包括:測(cè)試與瀏覽器的兼容性——測(cè)試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測(cè)試系統(tǒng)功能——?jiǎng)?chuàng)建回歸測(cè)試檢驗(yàn)軟件功能和用戶需求。支持自動(dòng)錄制動(dòng)作和自動(dòng)生成 .Net、Java、Perl等不同語言的測(cè)試腳本。
安裝
pip install selenium
安裝驅(qū)動(dòng)程序
下面介紹幾種主流瀏覽器的驅(qū)動(dòng)程序下載地址:
下面以windows環(huán)境,Chrome瀏覽器為例,我下載的是2.36版本的驅(qū)動(dòng)chromedriver_win32.zip,解壓得到一個(gè)chromedriver.exe文件,將其放置在瀏覽器的安裝目錄之下,如圖所示:

selenium的簡(jiǎn)單用法
如果你已經(jīng)按照上面安裝了selenium,并且安裝了驅(qū)動(dòng)程序,下面來簡(jiǎn)單的玩一玩selenium:
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
# 創(chuàng)建Chrome WebDriver實(shí)例,此路徑為驅(qū)動(dòng)程序的路徑
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
# 加載URL網(wǎng)頁
driver.get("http://www.baidu.com/")
# 判斷標(biāo)題中是否包含該字符串
assert "百度一下" in driver.title
# 查找id=kw的節(jié)點(diǎn)
element = driver.find_element_by_id("kw")
# 清空原有的輸入,輸入python進(jìn)行搜索
element.clear()
element.send_keys("python")
element.send_keys(Keys.RETURN)
# 判斷是否有結(jié)果返回
assert "No results found." not in driver.page_source
# 關(guān)閉當(dāng)前標(biāo)簽,也可以使用quit()關(guān)閉瀏覽器
driver.close()
上面的栗子,簡(jiǎn)單介紹了一下selenium的用法,接下來將結(jié)合selenium與unittest來編寫測(cè)試:
import unittest
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
# 繼承至TestCase,表示這是一個(gè)測(cè)試用例類
class BaiduCase(unittest.TestCase):
# 初始化的一部分
def setUp(self):
self.driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
# 測(cè)試用例方法,名稱可以自定義,方法名稱始終以test開頭
def test_serch(self):
self.driver.get("https://www.baidu.com/")
assert "百度一下" in self.driver.title
element = self.driver.find_element_by_id("kw")
element.clear()
element.send_keys("python")
element.send_keys(Keys.RETURN)
assert "No results found." not in self.driver.page_source
# 在執(zhí)行完各種測(cè)試用例方法之后會(huì)執(zhí)行,為一個(gè)清理操作
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()
執(zhí)行上面的代碼,將會(huì)返回如下信息:
.
----------------------------------------------------------------------
Ran 1 test in 2.914s
OK
值得注意的是,如果沒有配置驅(qū)動(dòng),或者路徑寫錯(cuò)了,將會(huì)出現(xiàn)WebDriverException錯(cuò)誤
與網(wǎng)頁互動(dòng)
與一個(gè)網(wǎng)頁進(jìn)行的真正的交互,具體的說,與網(wǎng)頁的HTML元素進(jìn)行交互。如果需要與之交互,那么久必須要查找到HTML的元素。WebDriver提供了多種查找HTML元素的方法。例如,給定一個(gè)元素為:
<input type="text" name="passwd" id="passwd-id"/>
我們可以使用下面任意方法查找到它:
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("http://input[@id='passwd-id']")
值的注意的是,使用xpath進(jìn)行匹配時(shí),如果有多個(gè)元素與查詢匹配,只會(huì)返回第一個(gè)元素。如果什么都找不到,將會(huì)返回NoSuchElementException錯(cuò)誤。當(dāng)你查找到一個(gè)元素時(shí),你可以用它做什么?首先你可能會(huì)想到在文本標(biāo)簽中輸入一些文本:
element.send_keys("python")
也可以使用Keys來模擬一些箭頭鍵:
from selenium.webdriver.common.keys import Keys element.send_keys(Keys.ARROW_DOWN)
你也可以使用clear()方法來清除文本標(biāo)簽里的內(nèi)容:
element.clear()
切換下拉菜單的狀態(tài),我們可以依次循環(huán)選擇每個(gè)選項(xiàng)并依次選擇每個(gè)選項(xiàng):
element = driver.find_element_by_xpath("http://select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
option.click()
正如你所看到的,這并不是處理select元素的最有效的方式。WebDriver類包還包括一個(gè)名為Select的類,它提供了與這些類交互的有用的方法:
from selenium.webdriver.support.ui import Select
element = driver.find_element_by_xpath("http://select[@name='name']")
select = Select(element)
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value("value")
WebDriver還提供取消選擇所有選項(xiàng)的功能:
element = driver.find_element_by_id('id')
select = Select(element)
select.deselect_all()
Select還具有獲取所有已經(jīng)選中的標(biāo)簽的方法:
element = driver.find_element_by_id('id')
select = Select(element)
all_options = select.all_selected_options
獲取所有可用的選項(xiàng):
options = select.options
完成后表格填寫后,您可以需要提交,一種方法是找到submit按鈕并點(diǎn)擊它:
driver.find_element_by_id('submit').click()
WebDriver在每個(gè)元素上都有一個(gè)submit的便利方法,如果你在一個(gè)表單的元素上調(diào)用它,Webdriver會(huì)遍歷DOM直到包含表單,然后調(diào)用它:
element.submit()
WebDriver還提供了前進(jìn)與后退的操作:
driver.forward() driver.back()
WebDriver還可以進(jìn)行設(shè)置Cookies和獲取Cookies:
driver.get('https://www.baidu.com/')
driver.add_cookie({"name":"foo","value":"laozhang"})
print(driver.get_cookies()
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python Socket編程技巧總結(jié)》、《Python URL操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Django-rest-framework中過濾器的定制實(shí)例
這篇文章主要介紹了Django-rest-framework中過濾器的定制實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Pandas之DataFrame對(duì)象的列和索引之間的轉(zhuǎn)化
這篇文章主要介紹了Pandas之DataFrame對(duì)象的列和索引之間的轉(zhuǎn)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Python實(shí)現(xiàn)多線程抓取網(wǎng)頁功能實(shí)例詳解
這篇文章主要介紹了Python實(shí)現(xiàn)多線程抓取網(wǎng)頁功能,結(jié)合具體實(shí)例形式詳細(xì)分析了Python多線程編程的相關(guān)操作技巧與注意事項(xiàng),并附帶demo實(shí)例給出了多線程抓取網(wǎng)頁的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-06-06
Python asyncore socket客戶端實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python asyncore socket客戶端實(shí)現(xiàn)方法,asyncore庫是python的一個(gè)標(biāo)準(zhǔn)庫,提供了以異步的方式寫入套接字服務(wù)的客戶端和服務(wù)器的基礎(chǔ)結(jié)構(gòu)2022-12-12
Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)
這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語言的寫法),對(duì)于字符串連接,相比于簡(jiǎn)單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進(jìn)入文章了解更詳細(xì)相關(guān)知識(shí)內(nèi)容吧2022-02-02
Python使用描述器實(shí)現(xiàn)ORM模型的方法詳解
這篇文章主要為大家詳細(xì)介紹了Python描述器實(shí)現(xiàn)ORM模型,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Python實(shí)現(xiàn)矩陣相乘的三種方法小結(jié)
今天小編就為大家分享一篇Python實(shí)現(xiàn)矩陣相乘的三種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07
一文帶你了解Python中的數(shù)據(jù)序列化與反序列化
Python提供了豐富的工具和庫來處理數(shù)據(jù)序列化與反序列化,本文帶領(lǐng)大家一起學(xué)習(xí),包括基本概念、常見的序列化格式、示例和最佳實(shí)踐,快跟隨小編一起學(xué)習(xí)起來吧2023-10-10
使用VLC實(shí)現(xiàn)自動(dòng)播放視頻的操作方法
VLC是一款開源的多媒體播放器,它支持大量的視頻和音頻格式,并且具有強(qiáng)大的腳本和編程接口,這篇文章主要介紹了使用VLC實(shí)現(xiàn)自動(dòng)播放視頻,需要的朋友可以參考下2024-03-03

