Katalon中控件的參數化


背景:
在Katalon中,我們通過Spy抓取的控件,保存在Object Repository中,其中的定位的屬性是固定的
如果把這些固定的定位屬性參數化呢,一種方式是直接通過Xpath路徑,創建Test Object,另外一種
方法是把,獲取到的控件定位屬性參數化
如何進行參數化呢?
 
 
定位屬性參數化:
 
所謂控件定位屬性參數化,就是當這個控件運行的時候,動態給定位屬性參數具體的值,如text
 
用一個實際的例子來看
假設APP啟動的時候有一個引導界面,其中需要我們從六個興趣標簽中點擊選擇
通過Spy Mobile,我們可以看到這幾個興趣標簽,但無法通過resource-id來區分,因為resource-id都一樣
但Text是不一樣的,那么我們就是需要把這個Text進行參數化,在運行的時候,給不同的Text值,從而選擇
不同的控件
 

 

 

 
捕獲到的控件如下,其中一共有六個控件,其中resource-id其實都是一樣的
 

 

 

 
如果我們要把其中的text修改為動態的屬性
此時我們需要把text的vlaue修改為 ${textname}
此時表示這個屬性為動態的
並且關聯的動態變量的名字為testname

 

 

 

 

 
 在testcase中的命令中選擇使用這個控件,此時打開Test Object Input
 在這個Test Object選擇中,下面有一個“Variables"
 在這個Variables中可以創建一個變量,同時指定變量的值
 指定的變量名,需要和Object Repository中,控件屬性中指定的變量名要一致,即設置為"testname"
 
 

 

 

  此時切換到Scripts中,可以看到詳細的命令

 
 Mobile.tap(findTestObject('tag_label', [('textname') : '軍事知識']), 0)
 
 當然這個動態的變量,可以支持文本,數字,或者Katalon中的變量,全局變量等
   
 如可以在Variables中,添加了一個變量,如叫label
 
  
   
 此時,命令就變成了
 
 Mobile.tap(findTestObject('tag_label', [('textname') : label]), 0)
 
 通過這種方式,我們可以在運行的時候,參數化控件的定位屬性
 那么,在一開始六個相似的Text控件,我們可以在Object Repository,只保留一個
 而不需要創建六個相似的控件,但只是Text屬性不同
 如果依次點擊,可以通過傳遞不同的Text的值來分別動態定位
 在腳本中,可能就是這樣的
 Mobile.tap(findTestObject('tag_label', [('textname') : '軍事知識']), 0)
 Mobile.tap(findTestObject('tag_label', [('textname') : '史前巨獸']), 0)
 Mobile.tap(findTestObject('tag_label', [('textname') : '動物天地']), 0)
 Mobile.tap(findTestObject('tag_label', [('textname') : '恐龍世界']), 0)
  
 如果有多個動態的屬性,其實是一樣的
 如添加resource-id也同樣變成了動態的屬性
 那么命令如下:
 Mobile.tap(findTestObject('tag_label', [('textname') : '軍事知識', ('resouceid') : 'com.mxr.dreambook:id/tv_tag']), 0)

 這部分的內容,Katalon的幫助中有說明

 可以參考
 
 定位序列:
  
 現在還是思考這個六個相似的TextView,已經實現通過Text屬性來動態定位,但如果要循環點擊這六個標簽
 我們必須先創建一個數值,類似['軍事知識','恐龍世界','動物世界'],然后通過循環來遍歷
 但如果Text的內容修改了,則會失效,並且通過文本數組來遍歷有些笨重
 我們想是否可以通過序列來遍歷呢?
 一開始觀察的時候,想到是否可以通過instance的屬性
 因為這六個不同的TextView,其中的instance的屬性分別是3,4,5,6,...
 實際嘗試后發現通過instance無法定位,因為instance屬性是無法生效的,
 我們在xpath中,如果定位到多個,是可以通過[i]來區分
 此時可以在Object Repository中,修改那個控件的定位方式為xpath
 Xpath屬性為
 (//*[@class = 'android.widget.TextView' and @resource-id = 'com.mxr.dreambook:id/tv_tag'])[${index}]
 其中,我們把這個index作為一個動態的參數,類似之前的方法
 

 

 

 

 

 

 
 在腳本中,我們就可以通過1到6的循環來循環點擊這個標簽
 //選擇六個興趣標簽
   for (def i : (1..6)) {
      Mobile.tap(findTestObject('4Dapp/flashpage/tagselect/tag_Text', [('index') : i]), 5)
              }
  
 這樣就實現了動態的循環
 
 這部分的實現,可以參考Katalon的說明
  
 參考項目
  Katalon官方參考項目
    
    
  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM