selenium webdriver基于Python系列之教程之腳本分析詳解

腳本錄制完成之后,在Selenium IDE的Source中,即可以看到腳本的代碼了,將Python語言的腳本復制出來,新建到一個Test.py的文件中,可以看到,代碼如下,再次本著不錯過任何理所當然的不用加以說明的呃必然步驟的精神,小做分析一下(”’這種形式的在Python里是一種注釋,暫用這個進行解釋說明”’)。

# -*-coding: utf-8 –*-

”’這行是編碼的字符集格式,默認這行是看不見的,并且默認應該是# -*-

coding: cp936 -*-,因為我們測試中很多情況下要用到中文字符,使用cp936的話,對中文支持不是很友好,所以還是應該換成GBK的”’

from selenium import selenium

import unittest

”’引用selenium跟unittest文件,其中selenium用于對selenium內核的引用,從而可以使用selenium。而引用unittest則是用于驅動測試過程”’

classyoudaoTest(unittest.TestCase):

”’定義一個類youdaoTest,繼承unittest.TestCase,相當于C++里繼承時使用childClass::parentClass,TestCase類是Selenium里有來描述測試用例的類”’

def setUp(self):

”’def用來定義類的函數,(self)類似于一個指針,指向自己,相當于this”’

self.selenium = selenium("localhost", 4444, "*iexplore","http://account.youdao.com/")

”’對youdaoTest的selenium進行定義,具體參數下篇文章再解釋,只要記住本地運行的話,只要把最后一個參數改成你要測試的網址就行了”’

self.selenium.start()

”’使用前一行對selenium的初始化及配置參數,開始youdaoTest的selenium的測試”’

def test_youdaoTest(self):

”’具體測試內容、測試過程的腳本”’

sel = self.selenium

”’這行主要是為了在后面對self.selenium表示方便,改一下名稱。在python里,這種使用=的方法,是一種類似于指針的方法”’

sel.open("/login?service=gouwu&back_url=http%3A%2F%2Fgouwu.youdao.com%2Ffanxian%2Fuser%3F%26keyfrom%3Dgouwu.index.topright")

”’我在錄制的時候,這個參數是跟在之前那個http網址的后面的,在錄制的時候被自動拆分成了兩個過程,沒有參數的話,這里可以是/”’

sel.type("username", "room001@yeah.net")

sel.type("password","123456")

”’表示我對一個id="username"的網頁對象type輸入了room001@yeah.net這個參數,該對象的id值,一般可以通過在網頁上該元素身上右鍵-Inspect

Element來查看到的,當然,這個查看命令一般是瀏覽器自帶的,不同的瀏覽器略有出入”’

sel.click("http://input[@value='' and @type='submit']")

”’這個是取網頁對象的精華所在。很多時候,網頁上的某個元素是沒有明確id的,這時候就需要這種方式來選取,Xpath用法,以后會詳解。這里這個命令大概是說對一個value=""(或沒有value),type=“submit”的元素進行click操作”’

sel.wait_for_page_to_load("30000")

”’等等緩沖”’

sel.click(u"link=我的訂單")

sel.wait_for_page_to_load("30000")

f2 =sel.get_text("http://div[@id='j_odt_Loader']/table/tbody/tr[2]/td[5]")

f1 =sel.get_text("http://div[@id='j_odt_Loader']/table/tbody/tr[1]/td[5]")

”’這又是一個精髓,繼前面的click那行,又有很多時候,不止沒有id,設置連value、type什么的都是一樣的(常見于表格等等循環(huán)做出來的東西),這個時候,就需要對重復的元素(一般是div)進行個排序,從上倒下,1,2,3,4,5…..,tr[2]/td[5]也就是說那個table的第2行,第5列(也有可能數字有個偏差…)。這里f1/f2是我用來取數用的變量”’

f1=float(f1[:4])

f2=float(f2)

”’這個是這個用例里用來驗證的代碼,因為get_test取到的是字符串,這里轉化成了數字f1/f2,其中f1取得太長了,有不想要的字,直接截取了一下前四位”’

sel.click(u"link=我的帳戶")

sel.wait_for_page_to_load("30000")

self.assertEqual(str(f1+f2),sel.get_text("http://div[@id='fxuc_dashboard']/div[2]/div[1]/table/tbody/tr[2]/td/strong"))

”’seeretEqual用來驗證后面的第二個參數是不是和第一個參數相等。一般相等的話,Case就Pass了,不相等就Fail了。這里第一個參數是f1+f2,然后轉化成了字符,再去比較”’

def tearDown(self):

self.selenium.stop()

”’用來在執(zhí)行完testcase之后表示讓selenium停止”’

if__name__ == "__main__":

unittest.main()

”’這個if語句,是用來判定這個.py文件是不是在單獨運行。簡單的說,如果這個py文件是在單獨運行,或者說是個主程序,那個它的__name__就會是__name__,如果不是的話,或者說是用來被import的話,那么它的__name__就會是它的文件名,也就是Test。unittest.main()是用來驅動我們所定義的youdaoTest來執(zhí)行里面的代碼的,所有def都會按selenium所定義的順序來執(zhí)行”’

以上說明基本上就是selenium的基本腳本的使用方法了??梢詫ζ渲行枰牡胤竭M行更改,就是一個TestCase的腳本了。



點擊鏈接加入群【python測試開發(fā)】:https://jq.qq.com/?_wv=1027&k=45yi2pI

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容