Selenium教程2-基本腳本詳解

腳本錄製完成之後,在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的腳本了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章