使用Python和Chrome安裝Selenium WebDriver

什么是WebDriver?
WebDriver是用于與實時Web瀏覽器進行交互的可編程界面。它使測試自動化能夠打開瀏覽器,發(fā)送點擊,鍵入鍵,刮擦文本并最終干凈地退出瀏覽器。WebDriver界面是W3C建議書。WebDriver標準的最受歡迎的實現(xiàn)是Selenium?WebDriver,它是免費和開放源代碼。
WebDriver具有多個組件:
語言綁定。諸如Selenium WebDriver之類的軟件包為瀏覽器交互
提供了編程語言綁定。Selenium支持主要語言,例如C#,Java,JavaScript,Ruby和Python。
自動化代碼。程序員使用語言綁定來自動化瀏覽器交互。常見的
交互包括查找元素,單擊元素以及抓取文本。通常,這是使用測
試自動化框架編寫的。
JSON Wire協(xié)議。語言綁定使用JSON對每個交互進行編碼,并將
它們作為REST API請求發(fā)送到瀏覽器的驅(qū)動程序。JSON Wire協(xié)議
獨立于平臺和語言。
瀏覽器驅(qū)動程序。該驅(qū)動程序是測試計算機上的獨立可執(zhí)行文件。它充當交互的調(diào)用方和瀏覽器本身之間的代理。它接收JSON交互請
求,并使用HTTP將其發(fā)送到瀏覽器。
瀏覽器。瀏覽器呈現(xiàn)被測網(wǎng)頁。它基本上由駕駛員控制。所有主要
的瀏覽器都支持WebDriver。每個瀏覽器還需要將自己的驅(qū)動程序
類型與瀏覽器安裝在同一臺計算機上,并且可以從系統(tǒng)路徑進行
訪問。例如,谷歌瀏覽器需要ChromeDriver。
安裝Selenium WebDriver
對于我們的測試項目,我們將Selenium WebDriver的Python綁定與Google Chrome和ChromeDriver結合使用。我們可以使用任何瀏覽器,但請使用Chrome,因為(a)它具有很高的市場份額,并且(b)其開發(fā)人員工具稍后會派上用場。
驗證ChromeDriver是否可以從命令行運行:
$ chromedriverStarting ChromeDriver 73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72) on port 9515Only local connections are allowed.Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
然后,將Python的selenium軟件包安裝到我們的環(huán)境中:
$?pipenv?install?selenium?--dev現(xiàn)在,機器應該可以進行網(wǎng)絡測試了!
新測試
在名為的目錄下創(chuàng)建一個新的Python模塊。這個新模塊將保存我們的Web UI測試。然后,添加以下導入語句:tests/test_web.py
import pytestfrom selenium.webdriver import Chromefrom selenium.webdriver.common.keys import Keys
為什么我們需要這些進口?
pytest?將用于固定裝置Chrome?提供ChromeDriver綁定Keys?包含用于瀏覽器交互的特殊按鍵
WebDriver設置和清理
作為最佳實踐,每個測試用例都應使用其自己的WebDriver實例。盡管設置和清除會給每個測試增加幾秒鐘的時間,但是每個測試使用一個WebDriver實例可使測試保持簡單,安全和獨立。如果一個測試遇到問題,那么其他測試將不會受到影響。另外,為每個測試使用單獨的WebDriver實例可以使測試并行運行。
最好使用pytest固定裝置處理WebDriver設置。fixtures是pytest出色的設置和清除功能,它們也可以進行依賴項注入。任何需要WebDriver實例的測試都可以簡單地調(diào)用fixture來獲取它。
代碼
將以下代碼添加到:tests/test_web.py:
def browser():driver = Chrome()driver.implicitly_wait(10)yield driverdriver.quit()
browser是一個pytest固定功能,如裝飾器所示。讓我們逐步完成每一行,以了解此新裝置的功能。@pytest.fixture
driver?=?Chrome()Chrome()使用默認選項在本地計算機上初始化ChromeDriver實例。它返回的驅(qū)動程序?qū)ο笠呀壎ǖ紺hromeDriver實例。所有WebDriver調(diào)用都將通過它進行.
driver.implicitly_wait(10)Web UI測試自動化中最痛苦的部分是在觸發(fā)交互之后等待頁面加載/更改。該頁面需要時間來呈現(xiàn)新元素。如果自動化嘗試在存在新元素之前對其進行訪問,則WebDriver將引發(fā)一個NoSuchElementException。等待不當是Web UI測試“不穩(wěn)定”的主要來源之一。
implicitly_wait上面的??方法告訴驅(qū)動程序,每當嘗試找到元素時,它們要等待10秒鐘才能存在。等待機制很聰明:當元素出現(xiàn)時,它不會停止等待10秒鐘,而是會立即停止等待。隱式等待被聲明一次,然后自動用于??所有元素。另一方面,顯式等待可以以每次顯式等待調(diào)用為代價為每個交互提供自定義等待。作為最佳實踐,用等待一個風格??完全用于測試自動化。混合顯式和隱式等待會產(chǎn)生令人討厭的意外副作用。對于我們的測試項目,隱式等待10秒應該是合理的(如果您的Internet連接速度很慢,請增加此超時時間以進行補償)。
yield?driverpytest固定裝置應返回一個表示已設置內(nèi)容的值。我們的裝置返回對初始化的WebDriver的引用。但是,return它使用而不是使用語句,這yield意味著fixture?是generator。fixture?的第一個迭代-在我們的例子中是WebDriver初始化-是在測試開始之前要調(diào)用的“設置”階段。第二個迭代(將quit稱為調(diào)用)是測試完成后要調(diào)用的“清理”階段??。編寫夾具作為生成器將相關的設置和清理操作放在一起作為一個關注點。
driver.quit()無論發(fā)生什么情況,始終在測試結束時退出WebDriver實例。測試自動化結束時,測試機上的驅(qū)動程序進程不會總是死掉。未能明確退出驅(qū)動程序?qū)嵗赡軙顾鳛榻┦M程運行,這可能會消耗甚至鎖定系統(tǒng)資源。







微信掃一掃
添加小編微信加自學群一起來自學軟件測試啦
