Robot Framework + Selenium2Library自動化測試系列(11) - 類型轉換和List:工時表查詢3

上一篇文章我們用工時記錄的xpath個數(shù)驗證了搜索結果和實際結果是否匹配谆构。但是,光檢查工時表里的記錄數(shù)目對不對還不夠框都,考慮這么一種情況:萬一數(shù)目匹配搬素,但最后顯示的記錄里多了一個其它員工的記錄怎么辦?假設我搜索Tester One返回了如下結果:

多了一個Tester Two的記錄魏保。Tester One的xpath數(shù)目與在Excel表中的期望結果都是2熬尺,但實際搜索出來的總工時數(shù)是3。所以谓罗,我們還需要進一步對每一條數(shù)據(jù)進行驗證粱哼。

搜索欄中輸入Tester One先拿到每條記錄:

我的思路是逐行讀取每條記錄,每條有9列數(shù)據(jù)檩咱,把它們讀到list里然后再與輸入數(shù)據(jù)進行比較揭措。

既然是逐行讀取胯舷,那肯定要用循環(huán)語句。我們已經在登錄那個例子中讀文件的操作里使用到了for語句“砗現(xiàn)在介紹一種更容易理解的寫法桑嘶。如果用java寫For循環(huán)語句怎么寫?是不是for(int i = 0; i < count; i++)躬充?這里的寫法差不多逃顶,看下圖,在Search Timesheet By Employee Name中繼續(xù)寫第二個檢查點:

第9行寫個comment充甚,告知開始進行第二個檢查點的測試以政。第10行就是for循環(huán)的寫法,只是這里我把循環(huán)變量$i的初始值設成1伴找。注意盈蛮,雖然第5列寫的是${timesheetCount}+1,可實際最后一次循環(huán)的值是${timesheetCount}疆瑰。如果這里你寫${timesheetCount}眉反,那循環(huán)就進行到${timesheetCount}-1就停了,永遠在前一個停穆役,這里請注意寸五。

很顯然,由于${timesheetCount}等于2耿币,我們的循環(huán)語句只會循環(huán)兩次梳杏,每次拿出一條記錄。上篇文章已經用firebug找到了工時記錄的xpath了:

它們的xpath分別為:

第一條://table/tbody/tr[1]

第二條://table/tbody/tr[2]

用xpath可以訪問數(shù)據(jù):比如第一條數(shù)據(jù)的訪問結果如下:

如果這里沒看懂的朋友請再復習下xpath的相關知識淹接。沒問題后我們在ObjectRepository -> Timesheet.html中為xpath聲明變量${locTSTable_Records_Fields}:

這里我在xpath后面加了/td十性,以便一會兒訪問數(shù)據(jù)。又寫了個可替換的||ROW NUMBER||塑悼,因為第一次循環(huán)||ROW NUMBER||是1劲适,第二次是2,以此類推:

第13行就是替換過程厢蒜,${i_string}是${i}的字符串形式霞势。上篇文章我們有一步避免了使用轉換,這次很不幸斑鸦,躲不過去了愕贡。${i}在循環(huán)里默認是整型的,是integer巷屿,而Replace String不能用整型替換字符串固以,所以要在第12行轉換一下。轉換操作的關鍵字是Convert To String嘱巾,參數(shù)就是一個integer憨琳,轉換完可以賦給一個字符串變量诫钓。在API文檔上我們還能看到ConvertTo Integer,Convert To Boolean等等栽渴,其實都是為了轉化設計的尖坤。

第13行第二列局部變量${locTSTable_Records_Fields_Row}存的是${locTSTable_Records_Fields}替換后的字符串,它的值在第一次循環(huán)執(zhí)行到這里時應該是//table/tbody/tr[1]/td闲擦,看到這兒你就知道為什么我當時把${i}的初值設置成1了吧慢味?可以通過循環(huán)變量把tr的角標索引巧妙賦值,因為每次循環(huán)讀一條記錄墅冷,其實就是讀一條xpath纯路。好,現(xiàn)在我要把這條記錄里的每列數(shù)據(jù)都讀入到list里寞忿,然后一個一個和搜索關鍵字Tester One對比驰唬,看有沒有一樣的。如果有就證明工時記錄里包含關鍵字腔彰,測試通過叫编,反之則失敗。有人說了霹抛,你傻啊搓逾,直接對比第一列姓名不就完了么?是這樣杯拐,有時候搜索功能并不在乎數(shù)據(jù)出現(xiàn)的位置霞篡,只要出現(xiàn)就算搜索成功。再一個端逼,我也通過這么一種較復雜的驗證過程給大家講講如何聲明和使用list朗兵。

右擊Pages -> Timesheet.html創(chuàng)建Keyword“Get All Timesheet Fields”,用來寫把數(shù)據(jù)讀到list的過程顶滩。它有一個參數(shù)叫${locTSTable_Records_Fields_Row_Current}余掖,這個參數(shù)指的是當前的某一行,也就是某個tr礁鲁。如果這是第一次循環(huán)盐欺,傳進來的值就是//table/tbody/tr[1]/td。

如下圖救氯,第1行創(chuàng)建了一個空的list,之前說過歌憨,list的前綴是“@”着憨,而創(chuàng)建list的關鍵字是Create List。如果想取每列數(shù)據(jù)還要用For循環(huán)語句進行遍歷务嫡,每條工時記錄是9列甲抖,我們完全可以用9+1=10作為循環(huán)終值漆改。可這樣不好准谚,因為如果開發(fā)人員以后每次加了一列或是減了一列那我們還得重新修改函數(shù)挫剑,很不方便,也不靈活柱衔。最好讓程序自動得知當前有多少列樊破,不要把它寫死。所以第2行我還是用Get Matching Xpath Count唆铐,得到這條記錄/tr的xpath里有多少個td哲戚,也就是多少列,賦給一個叫${fieldCount}的局部變量:

循環(huán)過程如下3-6步:

再看一遍這7列數(shù)據(jù)作為提示:

字有點小艾岂,不過還是能看清楚的顺少。這個例子中循環(huán)需要進行7次,但終值為8王浴,所以在第三行用${fieldCount}+1表示脆炎。總共7個數(shù)據(jù)氓辣∶朐#看到這里你會發(fā)現(xiàn)什么?我們還可以用循環(huán)變量${j}當td的角標索引筛婉。當前參數(shù)是//table/tbody/tr[1]/td簇爆,我們需要做的就是第4行的連接字符串。這里我們和上次連接字符串的情況不同爽撒,td和[${j}]之間不需要空格入蛆,所以需要加個Separator=來區(qū)分土全。不明白的Ctrl+ALT+Space打開API就懂了香璃。如果這是第一次循環(huán),第4步結束的結果就應該是${locTSTable_Records_Fields_Column_Current} = //table/tbody/tr[1]/td[1]椅亚。第5行就是用Get Text關鍵字對xpath進行簡單的取值源武,第一次循環(huán)得到“Tester One”扼褪。最后一步,得到的數(shù)據(jù)放到咱們之前聲明的list中粱栖,用到的關鍵字是Append to List话浇。這個關鍵字屬于一個名叫Collections的library,用之前請先引入ApplicationSpecific.html:

Append To List接受兩個參數(shù)闹究,第一個是目標list幔崖,這里的用${fieldList}表示;是第二個是要放進list的數(shù)據(jù)變量。有人問為什么${fieldList}不寫成@{fieldList}赏寇,它不是個List嗎吉嫩?注意,List只有在聲明和作為返回值的時候才用“@”表示嗅定,賦值過程把它當成一個變量來寫自娩。

7次循環(huán)過后,數(shù)據(jù)全部進入list渠退。然后返回list到之前的函數(shù)忙迁,我直接在Return Value那里寫了:

List返回之后就簡單了,直接看看包不包含搜索關鍵字唄智什,用的語句是List Should Contain Value动漾。在Search Timesheet By Employee Name中調用Get All Timesheet Fields:

List Should Contain Value也是個布爾函數(shù),判斷列表里有沒有目標數(shù)據(jù)荠锭。它有兩個參數(shù)旱眯,列表以及目標數(shù)據(jù)。有的話測試通過证九,沒有測試失敗删豺。

寫完這一步,整個程序的脈絡就清晰多了愧怜。首先對記錄進行循環(huán)呀页,每讀取一條記錄,就在第13行調用Get All Timesheet Fields傳入當前記錄的xpath拿到所有列拥坛,然后通過對列的循環(huán)取值放入list蓬蝶,最后看list里有沒有要搜索的文字。雖然復雜猜惋,但一切看起來都正確丸氛。

到現(xiàn)在只是做完搜索Tester One的,那另外三個員工呢著摔?還是讀文件那些東西缓窜,每次從文件里讀一個員工姓名以及期望的工時數(shù)目,然后調用Search Timesheet By Employee Name執(zhí)行剩下的搜索操作谍咆。再建一個Keyword叫Search Timesheet作為這一系列操作的總函數(shù)禾锤,代碼如下:

最后回到TCTIMES-1,在第7行和第8行加上總函數(shù)Search Timesheet摹察,這個test case就寫完了:

運行TCTIMES-1恩掷,測試通過。這就是關于工時表的第一個Test case供嚎,之后我會再帶著大家看一個例子黄娘。

這篇文章的源代碼在[Test10](https://github.com/cslm/cslm.robotframework/tree/master/Test10)里旦签。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寸宏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偿曙,老刑警劉巖氮凝,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異望忆,居然都是意外死亡罩阵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門启摄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稿壁,“玉大人,你說我怎么就攤上這事歉备「凳牵” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵蕾羊,是天一觀的道長喧笔。 經常有香客問我,道長龟再,這世上最難降的妖魔是什么书闸? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮利凑,結果婚禮上浆劲,老公的妹妹穿的比我還像新娘。我一直安慰自己哀澈,他們只是感情好牌借,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著日丹,像睡著了一般走哺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哲虾,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天丙躏,我揣著相機與錄音,去河邊找鬼束凑。 笑死晒旅,一個胖子當著我的面吹牛,可吹牛的內容都是我干的汪诉。 我是一名探鬼主播废恋,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼谈秫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鱼鼓?” 一聲冷哼從身側響起拟烫,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迄本,沒想到半個月后硕淑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡嘉赎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年置媳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片公条。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡拇囊,死狀恐怖,靈堂內的尸體忽然破棺而出靶橱,到底是詐尸還是另有隱情寥袭,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布关霸,位于F島的核電站纠永,受9級特大地震影響,放射性物質發(fā)生泄漏谒拴。R本人自食惡果不足惜尝江,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望英上。 院中可真熱鬧炭序,春花似錦、人聲如沸苍日。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽相恃。三九已至辜纲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拦耐,已是汗流浹背耕腾。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杀糯,地道東北人扫俺。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像固翰,于是被迫代替她去往敵國和親狼纬。 傳聞我的和親對象是個殘疾皇子羹呵,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容