第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有個初步的輪廓上的認識即可。