本文用同一個實例來演示如何編寫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)知識!