打開Pages -> Login.html -> Login to hrsystem,第6步是等待5秒鐘。現在老板來了,說你急啥?5秒鐘太短了,你讓它等最少10秒。好,那你就得把所有5改成10。如果你有很多文件很多函數呢?一個一個改明顯不現實,更何況如果函數眾多,很可能我們要改的就成幾何級網上走了,估計改完了也該下班回家了。要是能聲明一個變量就好了,這樣只改變變量的值不就成了么?之前我們為函數聲明過參數,同樣,我們也可以用Python定義的方法來聲明變量。
和函數一樣,變量也是可以聲明在資源文件下來統一管理。右鍵點擊項目名稱 -> New Directory,新建一個文件夾叫ObjRepository。右鍵點擊文件夾ObjRepository -> New Resources創建個也叫Login.html的資源文件。注意,現在我們有兩個叫Login.html的資源文件,一個是Pages下的,負責管理登錄模塊所需要的函數,一個是ObjRepository下的,負責管理登錄模塊所需要的變量,請注意區分一下。
Login to hrsystem函數中和登錄模塊相關的變量包括這么幾個:員工代號文本框(第3行),密碼文本框(第4行),登錄確認按鈕(第5行),總共3個,導航欄上的Home按鈕算主頁模塊(Home)的,我先不把它算進去。我給它們一個個創建變量,以第3行的員工代號文本框為例,右鍵點擊ObjRepository -> Login.html -> New Scalar,Scalar代表變量或是參數。輸入${locEmpCode}作為名字,然后把函數login to hrsystem里面對應的只拷貝過來。為變量起名字時最好能有提示的作用,比如我用前綴“loc”代表該變量存儲的值指的是一個網頁控件的位置:
因為該變量是要用在函數中的,所以在pages的Login.html里引入ObjRepository里的Login.html:
最后在login to hrsystem中用變量名代替原先的值:
當然,如果按住ctrl+alt+space組合鍵該變量名也會出現。所以千萬不要忘記引入資源文件,不引就不可見。用相同方法創建剩余的兩個變量:${locEmpPassword}和${locLoginConfirm}:
再次替換:
舉個例子,如果變量${locEmpCode}的id有變化,我們可以直接在ObjRepository的相關資源文件中修改它就可以了,不用打開一個個test case或是keyword。這下是不是容易多了?同理,我們把導航欄的Home按鈕也用變量表示,右鍵點擊ObjRepository -> New Resource新建Home.html資源文件 -> ${locHome},把Home的xpath值寫進去,然后再替換,別忘了在Pages里的Login.html中引用該資源文件:
login to hrsystem里還有網址,瀏覽器和等待這三個操作需要創建變量,這幾個變量可以放在另一個資源文件中,畢竟也不是登錄或主頁的模塊專屬。右鍵ObjRepository ->New Resource,新建資源文件Environment.html,然后新建${ApplicationURL},${sBrowser}和${ShortWait}并把值包含進去,如圖7-7:
這幾個變量名都沒有用“loc”作為前綴,因為它們都不是某一個網頁控件的位置。在Pages -> Login.html中引入Environment.html,然后替換,最后如下圖:
TCLOG-1里的文件路徑前半部分也可以用變量替換,變成${PROJECT_HOME}/Test_Data/Login/TCLOG-1.xls:
執行看看結果。我們對第一個測試用例– 網站登錄就暫時修改到這兒,項目結構差不多就搭好了。5個文件夾分別存放test case,函數,變量,測試數據和自己編寫的程序。今后我們用Robot Framework編寫測試用例都會繼續使用這個結構,并在它的基礎上進行拓展。再完善一下RF的結構圖:
這篇文章的源代碼在[Test7](https://github.com/cslm/cslm.robotframework/tree/master/Test7)中。