Selenium2自動化測試實戰基於Python語言》讀書筆記--第2章

玉露楓林發表於2018-08-04

第2章 測試環境搭建

2.1 Windows下的環境搭建

Python 2 or Python 3?

書中是選擇使用了Python 3,我個人是選擇了適合當前產品的Python 2,大家各自看吧。

2.1.1 安裝Python

根據作業系統選擇對應版本進行安裝即可,不再贅述。

2.1.2 安裝setuptools與pip

setuptools是Python Enterprise Application Kit(PEAK)的一個副專案,它是Python的distutilsde工具的增強工具,可以讓程式猿更方便地建立和釋出Python包,特別是那些對其他包有依賴性的狀況。

當需要安裝第三方Python包時,經常會使用easy_install命令,其實該命令是由PEAK開發的setuptools包裡帶的一個簡易安裝命令,因此使用easy_install時實際上是在呼叫setuptools來完成安裝模組的工作。

pip是一個安裝和管理Python包的工具, 通過pip來安裝Python包變得十分簡單,省去了搜尋-查詢版本-下載-安裝等繁瑣的過程。pip的安裝依賴於setuptools,所以在安裝pip之前需要先安裝setuptools。

2.1.3 安裝Selenium

通過pip命令可以直接安裝Selenium:pip install selenium

當只輸入包名稱則預設安裝最新的版本,當然也可以指定版本號安裝:pip install selenium==2.48.0

檢視安裝的包的版本資訊:pip show selenium

2.1.4 安裝ActivePython

ActivePython是由ActiveState公司推出的Python專用程式設計和除錯工具。

ActivePython包含完整的Python核心,整合pip包管理工具,提供IDLE,以及WindowsAPIs服務等,總之非常完善,只是不開源,但可以免費使用。

Ps:本人使用的是Python2.7,所以下載的ActivePython也是針對此版本的。

2.2 Ubuntu下的環境搭建

Ubuntu自身對Python的依賴性較強,所以都是自帶Python,同時包含2和3兩個版本。

setuptools與pip已經存在於Ubuntu的軟體倉庫中,可以直接使用apt-get命令進行安裝:

<span style="color:#000000"><code>sudo apt-get install python3-setuptools
sudo apt-get install python3-pip</code></span>
  • 1
  • 2

安裝Selenium:pip install selenium

2.3 使用IDLE編寫Python

IDLE(Integrated Development Environment,整合開發環境)

Alt+P:回退到上一次編輯的程式碼

Alt+N:前進到下一次編輯的程式碼

2.4 編寫第一個自動化指令碼

baidu.py

<span style="color:#000000"><code class="language-python"><span style="color:#880000"># -*- coding:utf-8 -*-</span>

<span style="color:#000088">from</span> selenium <span style="color:#000088">import</span> webdriver

driver = webdriver.Firefox()
driver.get(<span style="color:#009900">"https://www.baidu.com"</span>)

driver.find_element_by_id(<span style="color:#009900">"kw"</span>).send_keys(<span style="color:#009900">"Selenium2"</span>)
driver.find_element_by_id(<span style="color:#009900">"su"</span>).click()
driver.quit()</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

對上述程式碼進行解釋:

# -*- coding:utf-8 -*- 防止亂碼問題,以及方便地在程式中新增中文註釋,把編碼統一成UTF-8,在Python2時代,這個基本是必須的,但是到了Python3時代就不那麼重要了。

from selenium import webdriver 匯入WebDriver包,才能使用WebDriver API進行自動化指令碼開發。

driver=webdriver.Firefox() 把webdriver的Firefox物件賦值給變數driver,只有獲得了瀏覽器物件後,才可以啟動瀏覽器,開啟網址,操作頁面元素,Firefox瀏覽器去掉預設已經在Selenium WebDriver包裡了,可以直接呼叫,如果是使用IE或者Chrome瀏覽器則需要安裝驅動才行。

driver.get("https://www.baidu.com") 獲得瀏覽器物件後,通過get()方法,可以向瀏覽器傳送網址URL。

driver.find_element_by_id("kw").send_keys("Selenium2") 關於頁面元素的定位在後面會相吸介紹,這裡是通過id=kw,定位到百度的輸入框,並通過鍵盤輸入方法send_keys()向百度輸入框裡輸入“Selenium2”搜尋關鍵字。

driver.find_element_by_id("su").click() 這一步通過id=su定位“百度一下”搜尋按鈕,並向搜尋按鈕傳送單擊事件click()。

driver.quit() 退出並關閉瀏覽器及相關的驅動程式。

這裡在實際執行中遇到了一個問題,當執行該指令碼時,出現了錯誤提示:

<span style="color:#000000"><code>selenium.common.exceptions.WebDriverException: <span style="color:#000088">Message</span>: <span style="color:#009900">'geckodriver'</span> executable needs <span style="color:#000088">to</span> be <span style="color:#000088">in</span> PATH.</code></span>
  • 1

在網上搜了一下,發現是Firefox高版本需要使用 geckodriver 來驅動,不再使用Selenium預設自帶的Firefox webdriver。

需要在下面這個地址下載 geckodriver 並將其放在系統環境變數PATH目錄裡即可:

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

這裡我是直接把下載到的檔案放在了Python的安裝目錄裡,再次執行指令碼發現還有錯誤,這次錯誤簡單了,就是無法訪問網頁,這個查自己的主機發現是訪問百度出了點問題,修改一下DNS就解決了。

不過還有個問題: 整個過程,很快,就是開啟瀏覽器,輸入百度地址搜尋關鍵字,然後瀏覽器就關閉了,根本沒截到圖,要想截到圖,就得註釋掉driver.quit()這句,效果就出來了:

這裡寫圖片描述

2.5 安裝瀏覽器驅動

WebDriver支援:

  • Firefox(FirefoxDriver)
  • IE(InternetExplorerDriver)
  • Opera(OperaDriver)
  • Chrome(ChromeDriver)
  • Android(AndroidDriver)
  • iPhone(IPhoneDrvier)

各個驅動的下載地址:http://www.seleniumhq.org/download/

操作步驟就是下載對應驅動,將驅動檔案放在Path環境變數目錄下即可。

2.6 不同程式語言下使用WebDriver

W3C(全球資訊網聯盟)對WebDriver做定義和規範:http://www.w3.org/TR/webdriver/

WebDriver:是一個遠端控制介面,支援反省和使用者代理的控制權。它提供了一個獨立於系統平臺和程式語言的線協議(Wire Protocol)作為一種遠端程式程式指示Web瀏覽器的行為。

  • Java中引入Selenium WebDriver實現自動化測試
<span style="color:#000000"><code class="language-java"><span style="color:#000088">package</span> com.test.<span style="color:#000088">case</span>;

<span style="color:#880000">//新增Selenium(webdiver)引用</span>
<span style="color:#000088">import</span> org.openqa.selenium.By;
<span style="color:#000088">import</span> org.openqa.selenium.WebDriver;
<span style="color:#000088">import</span> org.openqa.selenium.firefox.*;

<span style="color:#000088">public</span> <span style="color:#000088">class</span> <span style="color:#4f4f4f">BaiduTest</span> {

    <span style="color:#000088">public</span> <span style="color:#000088">static</span> <span style="color:#000088">void</span> <span style="color:#009900">main</span>(String[] args){

        WebDriver driver = <span style="color:#000088">new</span> FirefoxDriver();
        driver.get(<span style="color:#009900">"https://www.baidu.com"</span>);

        driver.findElement(By.id(<span style="color:#009900">"kw"</span>)).sendKeys(<span style="color:#009900">"selenium2"</span>);

        driver.findElement(By.id(<span style="color:#009900">"su"</span>)).click();

        driver.quit();
    }
}</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • Ruby中引入Selenium WebDriver實現自動化測試
<span style="color:#000000"><code class="language-ruby"><span style="color:#880000">#匯入Selenium(webdriver)包</span>
<span style="color:#000088">require</span> <span style="color:#009900">'selenium-webdriver'</span>

driver = <span style="color:#009900">Selenium::WebDriver</span>.<span style="color:#000088">for</span> <span style="color:#006666">:firefox</span>
driver.navigate.to <span style="color:#009900">"https://www.baidu.com"</span>

driver.find_element(<span style="color:#006666">:id</span>, <span style="color:#009900">'kw'</span>).send_keys <span style="color:#009900">"selenium2"</span>
driver.find_element(<span style="color:#006666">:id</span>, <span style="color:#009900">'su'</span>).click()

driver.quit</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

雖然在不同語言中語法上有差異,不過共同點都是:

  • 首先匯入Selenium(webdriver)模組
  • 呼叫Selenium的瀏覽器驅動,獲取瀏覽器控制程式碼(driver)並啟動瀏覽器
  • 通過控制程式碼訪問百度URL
  • 通過控制程式碼操作頁面元素(百度輸入框和按鈕)
  • 通過控制程式碼關閉瀏覽器

2.7 總結

本章主要是介紹了selenium的一些概念、安裝、簡單示例、瀏覽器驅動、不同語言的支援。

內容並不複雜,主要是實操上與書中取得一致效果,對selenium有個初步的輪廓上的認識即可。

相關文章