一文搞定Java和Python在Selenium3中的應(yīng)用

本文用同一個實例來演示如何編寫python 和java代碼的selenium實戰(zhàn)文章,讀者可以通過這篇文章了解到selenium是什么、如何使用katalon recorder錄制腳本、如何搭建Selenium環(huán)境以及如何使用python或者java編寫selenium腳本。文章有一點長,但是請相信我,文章真的很實用,如果你想上手Selenium自動化測試,她一定會幫到你!無論你的web項目編碼使用的是java還是python,看這篇文章就夠了!

Selenium概述

Selenium 是用于測試Web 應(yīng)用程序用戶界面(UI) 的常用框架。它是一款用于運(yùn)行端到端功能測試的超強(qiáng)工具。您可以使用多個編程語言編寫測試(目前支持的語言有Java,Python,Ruby, C#),并且Selenium 能夠在一個或多個瀏覽器中執(zhí)行這些測試。

目前Selenium 組件主要包括SeleniumIDE ,Webdriver,Selenium Grid。

Selenium主要分為2和3,二者具體區(qū)別如下:

Selenium3可以看作是selenium2的升級版本,主要更新內(nèi)容如下:

去掉了對selenium rc的支持。

全面擁抱java 8。 如果你需要使用selenium的java binding話,那么你就必須使用java 8了。

支持最新的firefox、edge、chrome、safari、opera、ie瀏覽器。

環(huán)境搭建

任何自動化測試的第一步都是從環(huán)境搭建開始、主要是是編碼語言的安裝、IDE的安裝,最后是工具的安裝,在這里先講java的環(huán)境搭建,然后講python的環(huán)境搭建

Java環(huán)境搭建

前提:

安裝java,jdk 1.8.0_151

安裝eclispe?Neon.3 Release(4.6.3)

下載各個瀏覽器的driver,以firefox為例,firefox版本74.01(64位)

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

選擇geckodriver-v0.26.0-win64.zip

注意:下載后把geckodriver.exe 放入windows的環(huán)境變量中

下載selenium jar包

訪問https://www.selenium.dev/downloads/

IDE中導(dǎo)入selenium jar

把下載的selenium jar包和Junit4Library引入到Eclipse的selenium自動化項目工程

Python環(huán)境搭建

前提:

安裝python,3.7.4,把 你的python\Scripts目錄加入環(huán)境變量中

安裝pycharm社區(qū)版就可以

selenium模塊安裝

安裝selenium ,在cmd窗口中輸入 pip install selenium,完成selenium模塊的安裝

由于Java環(huán)境搭建中,已經(jīng)把geckodriver.exe 放入windows的環(huán)境變量中,這里就無需重復(fù)操作了

腳本錄制

環(huán)境搭建后,我們可以進(jìn)行自動化的上手操作了,錄制腳本。

這里給大家介紹一款Selenium IDE的替代者,Katalon Automation Recorder

如下為安裝使用方法:

安裝

安裝去谷歌應(yīng)用商店,或者火狐插件均可下載,文檔中的版本是4.1.3

安裝完成后,右上角會出現(xiàn)插件圖標(biāo):

使用

點擊圖標(biāo),會出現(xiàn)單獨(dú)的 Katalon Recorder 窗口:

其中:

①工具欄

②用例管理器

③用例詳情

④ Log/Reference/Variable

點擊窗口上的 Record,下面就會開始錄制瀏覽器操作了。

這里我們打開百度首頁,輸入selenium,點擊“百度一下”按鈕。

每當(dāng)操作頁面UI元素時候,插件就會記錄下你這些動作,生成對應(yīng)的錄制腳本。

錄制完成后,點擊“Stop”按鈕停止錄制,點擊“Play”按鈕可以回放剛才的動作。

腳本導(dǎo)出

點擊 Export 按鈕可以把錄制的腳本轉(zhuǎn)化成不同的腳本語言,選擇Java(WebDriver+JUnit),可以看到對應(yīng)的Java腳本,還可以把腳本導(dǎo)出到IDE中進(jìn)行二次開發(fā)。

選擇Python2(WebDriver+unittest),可以看到對應(yīng)的python腳本,還可以把腳本導(dǎo)出到IDE中進(jìn)行二次開發(fā)。

腳本解析

前面我們已經(jīng)演示了如何把錄制的代碼分別轉(zhuǎn)化成java腳本和python腳本,如果想要執(zhí)行腳本只需要把對應(yīng)的java文件和py文件拷貝到Eclipse 和Pycharm中運(yùn)行即可。這里我重點分析一下自動腳本的含義:

先分析java腳本,java的selenium腳本是基于junit4測試框架的,關(guān)于junit4框架這里就不詳細(xì)說明了,后面我會寫關(guān)于junit4的詳細(xì)文章,歡迎大家持續(xù)關(guān)注。具體腳本說明請參考下圖:

然后分析python腳本,python的selenium腳本是基于unittest測試框架的,unittest的規(guī)則與junit4類似,這里也不再詳細(xì)說明了。


核心api的分析

Java

打開firefox瀏覽器

driver = new FirefoxDriver();

打開百度首頁

driver.get("https://www.baidu.com");

清理輸入框內(nèi)容

driver.findElement(By.id("kw")).clear();

在輸入框輸入“selenium”

driver.findElement(By.id("kw")).sendKeys("selenium");

點擊“百度一下”

driver.findElement(By.id("su")).click();

Python

打開firefox瀏覽器

self.driver = webdriver.Firefox()

打開百度首頁

driver.get("https://www.baidu.com/")

清理輸入框內(nèi)容

driver.find_element_by_id("kw").clear()

在輸入框輸入“selenium”

driver.find_element_by_id("kw").send_keys("selenium")

點擊“百度一下”

driver.find_element_by_id("su").click()

從上面例子不難看出,關(guān)于selnium 自動化測試,java和python提供的腳本是非常接近的,只要你會其中的一種,想讀懂另一種并不是什么難事!

斷言應(yīng)用

我在自動化入門的文章中介紹過,自動化測試的本質(zhì)是:自動化測試是把以人為驅(qū)動的測試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過程。我們可以看到上面的例子中代碼已經(jīng)完成了對手工測試執(zhí)行的代替,但是還有一點沒有搞定,那就是——如何校驗測試結(jié)果!無論是junit4還是unittest都提供了相關(guān)機(jī)制,我們統(tǒng)一稱之為斷言。

方法一:大家試想,我們搜索selenium關(guān)鍵字后,只要在網(wǎng)頁中能夠找到下圖里“百度為您找到相關(guān)結(jié)果約”相關(guān)的文字信息就證明我們搜索成功了呢?

答案是:Yes!

方法二:網(wǎng)頁中出現(xiàn)的selenium搜索結(jié)果都是鏈接形式展現(xiàn),那么我們只需要判斷網(wǎng)頁中的web元素包含“selenium”關(guān)鍵字即可。

方法n:一個業(yè)務(wù),可以有很多校驗點,大家可以結(jié)合實際業(yè)務(wù)自行挖掘!

這里我們利用方法二來作為斷言的校驗點,Junit4中可以用方法assertTrue、assertEquals來進(jìn)行斷言操作。我們可以使用driver.findElement(By.partialLinkText("selenium")) 來判斷頁面中是否出現(xiàn)包含selenium的鏈接。在默認(rèn)錄制的腳本中,有一個方法isElementPresent ,用來校驗頁面中是否包含某個元素,代碼如下:

我們可以利用該方法完成斷言操作,代碼如下:

assertTrue(isElementPresent(By.partialLinkText("selenium")));

改進(jìn)后的測試用例代碼如下:

最后運(yùn)行代碼 Run As >Junit Test,可以看到腳本的回放過程。

在python中,unittes提供方法assertTrue 和assertEqual作為斷言,同java代碼的實現(xiàn)原理,我們可以使用方法self.is_element_present(By.PARTIAL_LINK_TEXT,"selenium")

來判斷頁面中是否出現(xiàn)包含selenium的鏈接,改進(jìn)后的測試用例代碼如下:

最后在pycharm中運(yùn)行代碼如下圖所示,同樣可以看到腳本的回放過程。


講到這里,我把百度搜索這個實例,用java和python兩種語言進(jìn)行了實際操作?,F(xiàn)在大家已經(jīng)了解了上手selenium的方法,剩下的事情是需要大家自己了解selenium元素識別的方式以及常用api的使用方法了,隨著大家實際項目經(jīng)驗的豐富就會一點點成為selenium高手。

總結(jié)

selenium自動化測試的本質(zhì)總結(jié)為以下兩點:

1.通過使用selenium提供的api,對頁面元素進(jìn)行操控進(jìn)而模擬人工點擊;

2.通過斷言機(jī)制模擬人工校驗;

這個過程其實就是大家不斷熟練selneium api進(jìn)行編碼的過程,當(dāng)遇到復(fù)雜問題時,需要大大家具備過硬的編碼技能,否則自動化腳本會及其脆弱。各位同學(xué)可以自己搞定后面的事情,當(dāng)然也可以跟著我一起高效的學(xué)習(xí)自動化相關(guān)知識!

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容