天天看點

《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)

  1. 簡介

    本節介紹如何初始化一個webdriver執行個體對象driver,然後打開和關閉firefox浏覽器。要用selenium打開fiefox浏覽器。首先需要去下載下傳一個driver插件geckodriver.exe, 下載下傳位址https://github.com/mozilla/geckodriver/releases,下載下傳好這個exe檔案後,把這個檔案放到

你的python安裝目錄下,例如:C:\Python27\geckdriver.exe。

作為剛初學者,這裡不建議使用Python IDE工具,選擇一個功能強大的記事本編輯工具就好,例如Notepad++.等以後積累足夠了,需要編寫更多檔案,或者後期簡單架構設計,我們再來介紹和使用Pycharm這個IDE工具。

上一篇匆匆忙忙地将selenium安裝以後也沒有給小夥伴們介紹一下,今天就給不清楚的小夥伴和同學們普及一下selenium。

  1. Selenium 基本介紹

    Selenium`是開源的自動化測試工具,它主要是用于Web 應用程式的自動化測試,不隻局限于此,同時支援所有基于web 的管理任務自動化。

2.1 Selenium官網的介紹

Selenium is a suite of tools to automate web browsers across many platforms.

runs in many browsers and operating systems

can be controlled by many programming languages and testing frameworks.

Selenium 官網:http://seleniumhq.org/

Selenium Github 首頁:https://github.com/SeleniumHQ/selenium

Selenium 是用于測試 Web 應用程式使用者界面 (UI) 的常用架構。它是一款用于運作端到端功能測試的超強工具。您可以使用多個程式設計語言編寫測試,并且 Selenium 能夠在一個或多個浏覽器中執行這些測試。

Selenium 經曆了三個版本:Selenium 1,Selenium 2 和 Selenium 3。Selenium 也不是簡單一個工具,而是由幾個工具組成,每個工具都有其特點和應用場景。

Selenium 誕生于 2004 年,當在 ThoughtWorks 工作的 Jason Huggins 在測試一個内部應用時。作為一個聰明的家夥,他意識到相對于每次改動都需要手工進行測試,他的時間應該用得更有價值。他開發了一個可以驅動頁面進行互動的 Javascript 庫,能讓多浏覽器

自動傳回測試結果。那個庫最終變成了 Selenium 的核心,它是 Selenium RC(遠端控制)和 Selenium IDE 所有功能的基礎。Selenium RC 是開拓性的,因為沒有其他産品能讓你使用自己喜歡的語言來控制浏覽器。這就是 Selenium 1。

然而,由于它使用了基于 Javascript 的自動化引擎,而浏覽器對 Javascript 又有很多安全限制,有些事情就難以實作。更糟糕的是,網站應用正變得越來越強大,它們使用了新浏覽器提供的各種特性,都使得這些限制讓人痛苦不堪。

在 2006 年,一名 Google 的工程師, Simon Stewart 開始基于這個項目進行開發,這個項目被命名為 WebDriver。此時,Google 早已是 Selenium 的重度使用者,但是測試工程師們不得不繞過它的限制進行工具。Simon 需要一款能通過浏覽器和作業系統的本地方法

直接和浏覽器進行通話的測試工具,來解決Javascript 環境沙箱的問題。WebDriver 項目的目标就是要解決 Selenium 的痛點。

到了 2008 年,Selenium 和 WebDriver 兩個項目合并。Selenium 有着豐富的社群和商業支援,但 WebDriver 顯然代表着未來的趨勢。兩者的合并為所有使用者提供了一組通用功能,并且借鑒了一些測試自動化領域最閃光的思想。這就是 Selenium 2。

2016 年,Selenium 3 誕生。移除了不再使用的 Selenium 1 中的 Selenium RC,并且官方重寫了所有的浏覽器驅動。

2.2 Selenium 工具集

2.2.1 Selenium IDE

Selenium IDE (內建開發環境) 是一個建立測試腳本的原型工具。它是一個 Firefox 插件,實作簡單的浏覽器操作的錄制與回放功能,提供建立自動化測試的建議接口。Selenium IDE 有一個記錄功能,能記錄使用者的操作,并且能選擇多種語言把它們導出到一個可重用

的腳本中用于後續執行。

2.2.2 Selenium RC

Selenium RC 是selenium 家族的核心工具,Selenium RC 支援多種不同的語言編寫自動化測試腳本,通過selenium RC 的伺服器作為代理伺服器去通路應用進而達到測試的目的。

selenium RC 使用分Client Libraries 和Selenium Server。

Client Libraries 庫主要主要用于編寫測試腳本,用來控制selenium Server 的庫。

Selenium Server 負責控制浏覽器行為,總的來說,Selenium Server 主要包括3 個部分:Launcher、Http Proxy、Core。

2.2.3 Selenium Grid

Selenium Grid 使得 Selenium RC 解決方案能提升針對大型的測試套件或者哪些需要運作在多環境的測試套件的處理能力。Selenium Grid 能讓你并行的運作你的測試,也就是說,不同的測試可以同時跑在不同的遠端機器上。這樣做有兩個有事,首先,如果你有一個

大型的測試套件,或者一個跑的很慢的測試套件,你可以使用 Selenium Grid 将你的測試套件劃分成幾份同時在幾個不同的機器上運作,這樣能顯著的提升它的性能。同時,如果你必須在多環境中運作你的測試套件,你可以獲得多個遠端機器的支援,它們将同時運作

你的測試套件。在每種情況下,Selenium Grid 都能通過并行處理顯著地縮短你的測試套件的處理時間。

2.2.4 Selenium WebDriver

WebDriver 是 Selenium 2 主推的工具,事實上WebDriver是Selenium RC的替代品,因為Selenium需要保留向下相容性的原因,在 Selenium 2 中, Selenium RC才沒有被徹底的抛棄,如果使用Selenium開發一個新的自動化測試項目,那麼我們強烈推薦使用

Selenium2 的 WebDriver進行編碼。另外, 在Selenium 3 中,Selenium RC 被移除了。

3.浏覽器驅動driver安裝

3.1浏覽器驅動driver的下載下傳

driver的下載下傳應該是比較坑的部分,一定需要注意浏覽器版本。

從selenium官網進入下載下傳界面,這個時候請往下拉,雖然第三方的浏覽器都不是selenium官方開發的,但是你可以在selenium官網找到selenium支援的浏覽器相對應的驅動driver下載下傳連結,因為我在本地使用的浏覽器版本都是比較新的,是以對應的driver版本也都下載下傳最新版即可。

以下是三大常用浏覽器的下載下傳連結:

Google Chrome driver:https://sites.google.com/a/chromium.org/chromedriver/downloads

Mozilla GeckoDriver:https://github.com/mozilla/geckodriver/releases

Internet Explorer Driver:http://selenium-release.storage.googleapis.com/3.13/IEDriverServer_x64_3.13.0.zip

3.2浏覽器驅動driver的安裝

下載下傳下來的zip檔案解壓至python安裝目錄中,可以放置在:C:\Users\Administrator\AppData\Local\Programs\Python\Python36中,但是推薦放置在scripts目錄中:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts

《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)

完成以上工作,我們就可以進行測試使用selenium驅動浏覽器了

4.測試驅動浏覽器

4.1CMD中啟動python并從selenium引入webdriver包

from selenium import webdriver

《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)

4.2驅動chrome浏覽器

打開Chrome浏覽器,通路谷歌網址,然後再關閉Chrome浏覽器。

參考代碼

#coding=utf-8

#3.導入子產品

from selenium import webdriver

Ch_driver = webdriver.Chrome()

Ch_driver.get(“https://www.google.com”)

Ch_driver.quit() # 使用quit()關閉了chrome并結束了此次測試,如果是close()隻是關閉chrome,背景仍在進行。

《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)
《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)
《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)

4.3驅動Firefox浏覽器

打開Firefox浏覽器,通路谷歌網址,然後再關閉Firefox浏覽器。

參考代碼

#coding=utf-8

#.導入子產品

from selenium import webdriver

Fi_driver = webdriver.Firefox()

Fi_driver.get(“https://www.google.com”)

Fi_driver.quit()

《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)
《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)
《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)

4.4驅動IE浏覽器

打開IE浏覽器,通路谷歌網址,然後再關閉IE浏覽器。

參考代碼

#coding=utf-8

#導入子產品

from selenium import webdriver

Ie_driver = webdriver.Ie()

Ie_driver.get(“https://www.google.com”)

Ie_driver.quit()

《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)
《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)
《手把手教你》系列基礎篇之2-python+ selenium自動化測試-打開和關閉浏覽器(詳細)

看起來都正常驅動浏覽器并打開了網頁,然後關閉退出浏覽器。這樣我們就完成了selenium自動化測試的打開和關閉浏覽器的準備工作~

注意:可能出現的報錯

Exception: Message: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.

解決辦法:Internet選項->安全; 把Internet站點,本地Intrant,受信任站點 三個地方的安全界面都設定相同等級,例如都設定中; 再次運作代碼就可以用IE打開百度了。

總結:目前,由于IE的不穩定性和速度問題,建議采用火狐或者谷歌浏覽器來測試和debug自動化腳本。

4.5總結

以上代碼可以寫在一個檔案然後執行這個檔案即可。細心的小夥伴或者是童鞋覺得剛打開浏覽器時視窗有點小的話,你可以通過代碼最大化一下浏覽器。

用Notepad++打開一個空白檔案,輸入如下代碼,儲存為first.py

#coding=utf-8

#導入子產品

from selenium import webdriver # 導入webdriver包

driver = webdriver.Firefox() # 初始化一個火狐浏覽器執行個體:driver

driver.maximize_window() # 最大化浏覽器

driver.get(“https://www.baidu.com”) # 通過get()方法,打開一個url站點

driver.quit() #關閉并退出浏覽器

打開cmd視窗,cd到first.py所在的路徑,在cmd中輸入指令: python first.py回車,可以看看是否打開火狐,打開百度,關閉火狐的效果。

小結

通過上面代碼,和本文,基本了解了如何打開和關閉浏覽器。如果想打開IE或者Chrome浏覽器,也需要下載下傳對應浏覽器的driver.exe檔案,放到python安裝目錄。

注意:可能會遇到一些報錯

  1. geckodriver.exe沒有放到python安裝目錄下,這一類報錯。
  2. python first.py執行後,找到檔案,說明沒有通過cd指令切換到first.py所在的檔案夾路徑。