本文實例講述了Selenium基本用法。分享給大家供大家參考,具體如下:
Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能——創建回歸測試檢驗軟件功能和用戶需求。支持自動錄制動作和自動生成 .Net、Java、Perl等不同語言的測試腳本。
安裝
1
|
pip install selenium |
安裝驅動程序
下面介紹幾種主流瀏覽器的驅動程序下載地址:
下面以windows環境,Chrome瀏覽器為例,我下載的是2.36版本的驅動chromedriver_win32.zip,解壓得到一個chromedriver.exe文件,將其放置在瀏覽器的安裝目錄之下,如圖所示:
selenium的簡單用法
如果你已經按照上面安裝了selenium,并且安裝了驅動程序,下面來簡單的玩一玩selenium:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from selenium.webdriver import Chrome from selenium.webdriver.common.keys import Keys # 創建Chrome WebDriver實例,此路徑為驅動程序的路徑 driver = Chrome( "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" ) # 加載URL網頁 driver.get( "http://www.baidu.com/" ) # 判斷標題中是否包含該字符串 assert "百度一下" in driver.title # 查找id=kw的節點 element = driver.find_element_by_id( "kw" ) # 清空原有的輸入,輸入python進行搜索 element.clear() element.send_keys( "python" ) element.send_keys(Keys.RETURN) # 判斷是否有結果返回 assert "No results found." not in driver.page_source # 關閉當前標簽,也可以使用quit()關閉瀏覽器 driver.close() |
上面的栗子,簡單介紹了一下selenium的用法,接下來將結合selenium與unittest來編寫測試:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import unittest from selenium.webdriver import Chrome from selenium.webdriver.common.keys import Keys # 繼承至TestCase,表示這是一個測試用例類 class BaiduCase(unittest.TestCase): # 初始化的一部分 def setUp( self ): self .driver = Chrome( "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" ) # 測試用例方法,名稱可以自定義,方法名稱始終以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 # 在執行完各種測試用例方法之后會執行,為一個清理操作 def tearDown( self ): self .driver.close() if __name__ = = "__main__" : unittest.main() |
執行上面的代碼,將會返回如下信息:
.
----------------------------------------------------------------------
Ran 1 test in 2.914s
OK
值得注意的是,如果沒有配置驅動,或者路徑寫錯了,將會出現WebDriverException錯誤
與網頁互動
與一個網頁進行的真正的交互,具體的說,與網頁的HTML元素進行交互。如果需要與之交互,那么久必須要查找到HTML的元素。WebDriver提供了多種查找HTML元素的方法。例如,給定一個元素為:
1
|
< input type = "text" name = "passwd" id = "passwd-id" /> |
我們可以使用下面任意方法查找到它:
1
2
3
|
element = driver.find_element_by_id( "passwd-id" ) element = driver.find_element_by_name( "passwd" ) element = driver.find_element_by_xpath( "//input[@id='passwd-id']" ) |
值的注意的是,使用xpath進行匹配時,如果有多個元素與查詢匹配,只會返回第一個元素。如果什么都找不到,將會返回NoSuchElementException錯誤。當你查找到一個元素時,你可以用它做什么?首先你可能會想到在文本標簽中輸入一些文本:
1
|
element.send_keys( "python" ) |
也可以使用Keys來模擬一些箭頭鍵:
1
2
|
from selenium.webdriver.common.keys import Keys element.send_keys(Keys.ARROW_DOWN) |
你也可以使用clear()
方法來清除文本標簽里的內容:
1
|
element.clear() |
切換下拉菜單的狀態,我們可以依次循環選擇每個選項并依次選擇每個選項:
1
2
3
4
|
element = driver.find_element_by_xpath( "//select[@name='name']" ) all_options = element.find_elements_by_tag_name( "option" ) for option in all_options: option.click() |
正如你所看到的,這并不是處理select元素的最有效的方式。WebDriver類包還包括一個名為Select的類,它提供了與這些類交互的有用的方法:
1
2
3
4
5
6
|
from selenium.webdriver.support.ui import Select element = driver.find_element_by_xpath( "//select[@name='name']" ) select = Select(element) select.select_by_index(index) select.select_by_visible_text( "text" ) select.select_by_value( "value" ) |
WebDriver還提供取消選擇所有選項的功能:
1
2
3
|
element = driver.find_element_by_id( 'id' ) select = Select(element) select.deselect_all() |
Select還具有獲取所有已經選中的標簽的方法:
1
2
3
|
element = driver.find_element_by_id( 'id' ) select = Select(element) all_options = select.all_selected_options |
獲取所有可用的選項:
1
|
options = select.options |
完成后表格填寫后,您可以需要提交,一種方法是找到submit按鈕并點擊它:
1
|
driver.find_element_by_id( 'submit' ).click() |
WebDriver在每個元素上都有一個submit的便利方法,如果你在一個表單的元素上調用它,Webdriver會遍歷DOM直到包含表單,然后調用它:
1
|
element.submit() |
WebDriver還提供了前進與后退的操作:
1
2
|
driver.forward() driver.back() |
WebDriver還可以進行設置Cookies和獲取Cookies:
1
2
3
|
driver.get( 'https://www.baidu.com/' ) driver.add_cookie({ "name" : "foo" , "value" : "laozhang" }) print (driver.get_cookies() |
希望本文所述對大家Python程序設計有所幫助。
原文鏈接:https://blog.csdn.net/y472360651/article/details/79647410