Selenium Webdriver之Chrome瀏覽器操作小記

Selenium

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

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

  • Selenium Core:支持DHTML 的測試案例(效果類似數(shù)據(jù)驅動測試),它是Selenium IDE 和Selenium RC
    的引擎。
  • Selenium Grid - 允許您在不同的計算機上并行運行不同瀏覽器的測試。也就是說,針對運行不同瀏覽器和操作系統(tǒng)的不同計算機同時運行多個測試。從本質上講,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的目標是提供精心設計的面向對象的API,為現(xiàn)代高級Web應用程序測試問題提供改進的支持。
Selenium 組成

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

172.217.31.243 www.seleniumhq.org

Selenium 1.0

Selenium 1.0(又名,Selenium RC 或 Selenium Remote Control) 發(fā)布于2004年,基本構成如下:

Selenium 1構成

主要的兩個組件為:

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

簡化的架構圖如下:

Selenium 1 簡化架構圖

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更多內容,可以查看w3c文檔 2013版 2018版

Selenium 2

Selenium 2.0 具有來自 WebDriver 的清晰面向對象 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驅動程序(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 10、Python 2.7.15、Selenium 3.14.1Chrome 71.0.3578.80環(huán)境下,Selenium webdriver API 驅動 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ù)代碼,如頁面內存在大量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” 相關內容)

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')
# 輸入框內填寫 “selenium”
search_input.send_keys("selenium")
# 獲取百度首頁“百度一下”按鈕
search_btn = driver.find_element(By.ID, 'su')
# 點擊按鈕,實現(xiàn)表單提交
search_btn.click()

# driver.quit()

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

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

參考閱讀

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容