Selenium Webdriver之Chrome瀏覽器操作小記

Selenium

Selenium 是一套跨平臺的瀏覽器自動化測試框架(工具)惫谤,支持在多種系統(tǒng)環(huán)境丑慎、多種瀏覽器環(huán)境下使用迟螺,還可以使用多種編程語言來編寫測試拔妥。

Selenium 有多個項目構(gòu)成赶掖,形成了一個多功能的測試系統(tǒng):

  • Selenium Core:支持DHTML 的測試案例(效果類似數(shù)據(jù)驅(qū)動測試)感猛,它是Selenium IDE 和Selenium RC
    的引擎。
  • Selenium Grid - 允許您在不同的計算機上并行運行不同瀏覽器的測試奢赂。也就是說陪白,針對運行不同瀏覽器和操作系統(tǒng)的不同計算機同時運行多個測試。從本質(zhì)上講膳灶,Selenium-Grid支持分布式測試執(zhí)行咱士。它允許在分布式測試執(zhí)行環(huán)境中運行測試。
  • Selenium IDE - 用于開發(fā)Selenium測試用例的工具轧钓。它是一個易于使用的Chrome和Firefox擴展序厉,通常是開發(fā)測試用例的最有效方式。它使用現(xiàn)有的Selenium命令為您在瀏覽器中記錄用戶操作毕箍,并使用該元素的上下文定義參數(shù)弛房。這不僅節(jié)省了時間,而且是學習Selenium腳本語法的絕佳方式而柑。
  • Selenium RC (Selenium Remote Control) - 是一個客戶端/服務器系統(tǒng)文捶,允許您使用幾乎任何編程語言和測試框架在本地或其他計算機上控制Web瀏覽器。
  • Selenium WebDriver - 主要新功能是集成WebDriver API媒咳。除了解決Selenium-RC API中的一些限制之外拄轻,WebDriver還旨在提供更簡單,更簡潔的編程接口伟葫。Selenium-WebDriver的開發(fā)是為了更好地支持動態(tài)網(wǎng)頁,頁面元素可能會在不重新加載頁面的情況下發(fā)生變化院促。WebDriver的目標是提供精心設計的面向?qū)ο蟮腁PI筏养,為現(xiàn)代高級Web應用程序測試問題提供改進的支持斧抱。
Selenium 組成

注意:如出現(xiàn)Selenium官網(wǎng)訪問緩慢,可以在 C:\Windows\System32\drivers\etc\hosts 文件內(nèi)添加如下內(nèi)容后嘗試

172.217.31.243 www.seleniumhq.org

Selenium 1.0

Selenium 1.0(又名渐溶,Selenium RC 或 Selenium Remote Control) 發(fā)布于2004年辉浦,基本構(gòu)成如下:

Selenium 1構(gòu)成

主要的兩個組件為:

  • Selenium RC Server - 解釋并運行從測試程序傳遞的 Selenese 命令(Selenese 是 Selenium命令集合),并充當HTTP代理茎辐,攔截和驗證在瀏覽器和AUT之間傳遞的HTTP消息宪郊。
  • Client libraries - 提供每種編程語言和Selenium RC Server之間的接口。

簡化的架構(gòu)圖如下:

Selenium 1 簡化架構(gòu)圖

Selenium 2.0

Selenium 2 = WebDriver + Selenium 1

Selenium 2.0發(fā)布于2011年拖陆,是Selenium 1.0與Selenium WebDriver合并而成的一款性能更佳的產(chǎn)品弛槐。

WebDriver是一種用于自動化Web應用程序測試的工具,尤其是用于驗證它們是否按預期工作依啰。它旨在提供一個易于探索和理解的友好API乎串,比Selenium-RC(1.0)API更易于使用,這將有助于使您的測試更易于閱讀和維護速警。它不依賴于任何特定的測試框架叹誉,因此它可以在單元測試項目中使用。

關于 Webdriver更多內(nèi)容闷旧,可以查看w3c文檔 2013版 2018版

Selenium 2

Selenium 2.0 具有來自 WebDriver 的清晰面向?qū)ο?API长豁,并能以最佳的方式與瀏覽器進行交互,更多Selenium WebDriver的API接口操作可以查看此處忙灼。該版本中主推WebDriver匠襟,可以將其看做 Selenium RC 的替代。因為要保持向下兼容缀棍,Selenium 2.0 中并沒有徹底放棄 Selenium RC宅此。

Selenium 3.0

Selenium 3

Selenium 3.0首次發(fā)布于 2016年5月,主要有如下更新:

  • 停止使用 Selenium core (放棄Selenium RC)
  • 需要更高的Java版本支持(Java 8+)
  • 不再默認支持Firefox驅(qū)動程序(Mozilla推出Gecko Driver)
  • 使用W3C新標準的WebDriver
  • 瀏覽器供應商自己的WebDriver實現(xiàn)

三個版本關系大致如下:

Selenium 三個版本更替

Selenium與瀏覽器driver

為了實現(xiàn)Selenium對瀏覽器的操作爬范,針對幾款主流的瀏覽器父腕,提供了對應的 driver

瀏覽器driver 地址
Chrome - ChromeDriver github 下載地址1 下載地址2
Firefox - GeckoDriver github 下載地址
Edge - Microsoft WebDriver github 下載地址
Safari - WebDriver source
其他瀏覽器Driver 此處下載

Selenium webdriver 模擬 Chrome 瀏覽器操作

對于 Selenium 的這里僅作簡略介紹,大家可以參看官方文檔或類似書籍來學習青瀑。下面通過一些小示例璧亮,簡單記錄在 Windows 10Python 2.7.15斥难、Selenium 3.14.1枝嘶、Chrome 71.0.3578.80環(huán)境下,Selenium webdriver API 驅(qū)動 Chrome 瀏覽器操作的過程哑诊。

Chrome瀏覽器及chromedriver版本對應

Selenium 可以操作對應版本的瀏覽器群扶,就要下載對應的 Driver ,下面為 ChromeDriver 對應的 Chrome 版本

chromedriver版本 支持的Chrome版本
v2.44 v69-71
v2.43 v69-71
v2.42 v68-70
v2.41 v67-69
v2.40 v66-68
v2.39 v66-68
v2.38 v65-67
v2.37 v64-66
v2.36 v63-65
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60
v2.29 v56-58
v2.28 v55-57
v2.27 v54-56
v2.26 v53-55
v2.25 v53-55

注意:Chrome 70+ 版本后出現(xiàn)對應小版本的chromedriver,如本文瀏覽器版本為 71.0.3578.80 竞阐,則下載對應該版本的chromedriver缴饭。更多版本查看此處

Python安裝Selenium

Selenium Python bindings 是Selenium WebDriver的Python綁定版本骆莹,用于Python的自動化瀏覽器交互操作颗搂。

支持 Python 2.7Python 3.4+ 版本。

Python安裝Selenium可以通過如下命令

pip install selenium
或
easy_install selenium

如果使用 AnacondaMiniconda 幕垦,則使用如下命令安裝

conda install seleium

chromedriver 下載及配置

下載對應當前 Chrome 瀏覽器版本的 chromedriver 丢氢,在任意目錄解壓后,將解壓后的路徑配置到環(huán)境變量中方便程序中直接引用先改。

注意:64位瀏覽器下載32位driver即可疚察。

注意: 操作不同瀏覽器,需要下載對應瀏覽器版本的driver盏道,并添加driver路徑到環(huán)境變量中稍浆,否則運行代碼時,會出現(xiàn)類似selenium.common.exceptions.WebDriverException: Message: 'xxxdriver' executable needs to be in PATH. 的異常提示

Selenium webdriver實例化及頁面訪問

以下演示 Selenium 操控 Chrome 瀏覽器猜嘱,打開百度頁面

from selenium import webdriver

chromedriver = "D:\ProgramData\pkgs\chromedriver"
driver = webdriver.Chrome(chromedriver)
# driver = webdriver.Chrome()   # 設置了chromedriver的環(huán)境變量衅枫,則此行代碼等效于上面兩行代碼
driver.get("https://www.baidu.com")
driver.maximize_window()  # 好像沒有效果。朗伶。弦撩。
driver.quit()

get 方法會在頁面 onload 完成后顯示頁面,并繼續(xù)執(zhí)行后續(xù)代碼论皆,如頁面內(nèi)存在大量Ajax請求時益楼,為了保證頁面完整加載,可以考慮使用waits來等待頁面加載完成点晴。

chromedriver 打開百度首頁

Selenium webdriver API 獲取頁面元素

要定位一個元素感凤,Selenium提供了下列的查找元素的方法:

  • find_element_by_id - 查找對應id的元素
  • find_element_by_name - 查找對應名稱的元素
  • find_element_by_xpath - 查找對應xpath的元素
  • find_element_by_link_text - 查找對應超鏈接文本的元素
  • find_element_by_partial_link_text - 查找含有超鏈接文本的元素
  • find_element_by_tag_name - 查找對應標簽名的元素
  • find_element_by_class_name - 查找對應類名的元素
  • find_element_by_css_selector - 查找對應css選擇器的元素

如果要獲取多個相同元素(返回list列表),

  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector

除了上述的公共方法粒督,還提供了兩個私有方法

配合 By 類也可以用來實現(xiàn)上面方法的功能陪竿,By 類提供了一組支持的定位策略屬性:

  • CLASS_NAME = 'class name'
  • CSS_SELECTOR = 'css selector'
  • ID = 'id'
  • LINK_TEXT = 'link text'
  • NAME = 'name'
  • PARTIAL_LINK_TEXT = 'partial link text'
  • TAG_NAME = 'tag name'
  • XPATH = 'xpath'

上述方法使用參看此處 (對應Selenium WebDriver API參看此處

以下演示 selenium 查找百度首頁按鈕元素,邊獲取元素值

from selenium import webdriver

chromedriver = "D:\ProgramData\pkgs\chromedriver"
driver = webdriver.Chrome(chromedriver)
# driver = webdriver.Chrome()   # 設置了chromedriver的環(huán)境變量屠橄,則此行代碼等效于上面兩行代碼
driver.get("https://www.baidu.com")
# 查找元素
search_btn = driver.find_element_by_id('su')  #獲取百度首頁“百度一下”按鈕元素
print search_btn
print search_btn.id
print search_btn.size
print search_btn.tag_name
print search_btn.text
# 獲取元素屬性值
print search_btn.get_property('type')
print search_btn.get_attribute('class')
print search_btn.get_property('value')
# 獲取元素狀態(tài)
print search_btn.is_displayed()
print search_btn.is_enabled()
print search_btn.is_selected()
# 獲取元素css樣式
print search_btn.value_of_css_property('font')
print search_btn.value_of_css_property('color')
print search_btn.value_of_css_property('background')
driver.quit()

Selenium webdriver API 頁面表單操作

以下演示 Selenium 實現(xiàn)百度一下操作(用百度查找 “selenium” 相關內(nèi)容)

from selenium import webdriver
from selenium.webdriver.common.by import By

chromedriver = "D:\ProgramData\pkgs\chromedriver"
driver = webdriver.Chrome(chromedriver)
# driver = webdriver.Chrome()   # 設置了chromedriver的環(huán)境變量侈百,則此行代碼等效于上面兩行代碼
driver.get("https://www.baidu.com")
# 獲取百度首頁輸入框
search_input = driver.find_element(By.NAME, 'wd')
# 輸入框內(nèi)填寫 “selenium”
search_input.send_keys("selenium")
# 獲取百度首頁“百度一下”按鈕
search_btn = driver.find_element(By.ID, 'su')
# 點擊按鈕诽俯,實現(xiàn)表單提交
search_btn.click()

# driver.quit()

獲取輸入框元素后,使用 send_keys() 方法模擬輸入需要查找的內(nèi)容妥凳,之后獲取按鈕元素胀葱,并觸發(fā) click() 方法模擬點擊事件盗扇,以此模擬完成百度搜索功能

chromedirver 實現(xiàn)百度搜索

參考閱讀

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜘拉,一起剝皮案震驚了整個濱河市遂唧,隨后出現(xiàn)的幾起案子夺脾,更是在濱河造成了極大的恐慌,老刑警劉巖掏膏,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳翰,死亡現(xiàn)場離奇詭異,居然都是意外死亡馒疹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門乙墙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颖变,“玉大人,你說我怎么就攤上這事听想⌒壬玻” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵汉买,是天一觀的道長衔峰。 經(jīng)常有香客問我,道長蛙粘,這世上最難降的妖魔是什么垫卤? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮出牧,結(jié)果婚禮上穴肘,老公的妹妹穿的比我還像新娘。我一直安慰自己舔痕,他們只是感情好评抚,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伯复,像睡著了一般慨代。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啸如,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天侍匙,我揣著相機與錄音,去河邊找鬼组底。 笑死丈积,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的债鸡。 我是一名探鬼主播江滨,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼厌均!你這毒婦竟也來了唬滑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晶密,沒想到半個月后擒悬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡稻艰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年懂牧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尊勿。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡僧凤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出元扔,到底是詐尸還是另有隱情躯保,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布澎语,位于F島的核電站途事,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏擅羞。R本人自食惡果不足惜尸变,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祟滴。 院中可真熱鬧振惰,春花似錦、人聲如沸垄懂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽草慧。三九已至桶蛔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漫谷,已是汗流浹背仔雷。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舔示,地道東北人碟婆。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像惕稻,于是被迫代替她去往敵國和親竖共。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容