腳本錄製完成之後,在Selenium IDE的Source中,即可以看到腳本的代碼了,將Python語言的腳本複製出來,新建到一個Test.py的文件中,可以看到,代碼如下,再次本着不錯過任何理所當然的不用加以說明的呃必然步驟的精神,小做分析一下(”’這種形式的在Python裏是一種註釋,暫用這個進行解釋說明”’)。
-- coding: GBK –-
”’這行是編碼的字符集格式,默認這行是看不見的,並且默認應該是# -- coding: cp936 --,因爲我們測試中很多情況下要用到中文字符,使用cp936的話,對中文支持不是很友好,所以還是應該換成GBK的”’
from selenium import selenium
import unittest
”’引用selenium跟unittest文件,其中selenium用於對selenium內核的引用,從而可以使用selenium。而引用unittest則是用於驅動測試過程”’
class youdaoTest(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", "[email protected]")
sel.type("password", "123456")
”’表示我對一個id="username"的網頁對象type輸入了[email protected]這個參數,該對象的id值,一般可以通過在網頁上該元素身上右鍵-Inspect Element來查看到的,當然,這個查看命令一般是瀏覽器自帶的,不同的瀏覽器略有出入”’
sel.click("//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("//div[@id='j_odt_Loader']/table/tbody/tr[2]/td[5]")
f1 = sel.get_text("//div[@id='j_odt_Loader']/table/tbody/tr[1]/td[5]")
”’這又是一個精髓,繼前面的click那行,又有很多時候,不止沒有id,設置連value、type什麼的都是一樣的(常見於表格等等循環做出來的東西),這個時候,就需要對重複的元素(一般是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("//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()
”’用來在執行完testcase之後表示讓selenium停止”’
if __name__ == "__main__":
unittest.main()
”’這個if語句,是用來判定這個.py文件是不是在單獨運行。簡單的說,如果這個py文件是在單獨運行,或者說是個主程序,那個它的__name__就會是__name__ ,如果不是的話,或者說是用來被import的話,那麼它的__name__就會是它的文件名,也就是Test。unittest.main()是用來驅動我們所定義的youdaoTest來執行裏面的代碼的,所有def都會按selenium所定義的順序來執行”’
以上說明基本上就是selenium的基本腳本的使用方法了。可以對其中需要的地方進行更改,就是一個TestCase的腳本了。