UI自動化框架介紹


測試技術:

python3+selenium+PO+unittest+HTMLTestRunner

PO模型介紹:

PO為什么會出現?
頁面對象模型,當頁面特別多的時候,我們的代碼更容易維護

PO是什么?
1、Page Object,是一種設計模式,用來管理和維護一組web元素的對象庫;
2、在PO模式下,應用程序的每一個頁面都有一個對應的page class;
3、每一個page class維護着頁面的元素集合和操作這些元素方法;

PO的優勢:
1、PO提供了一種業務流程與頁面元素分離的模式,這使得測試代碼變得更加清晰;
2、頁面對象與用例分離,能夠更好的復用對象;
3、可復用的頁面代碼會使代碼風格更加優化;

代碼結構:

 

find element封裝:

將element信息轉變為元組

 def selector_to_locator(self, key):

     selector_by  =  self .get_by_key(key)
     selector_value  =  self .get_value(key)
     if  selector_by  = =  'id' :
         locator  =  (By. ID , selector_value)
     elif  selector_by  = =  'name' :
         locator  =  (By.NAME,selector_value)
     elif  selector_by  = =  'class_name' :
         locator  =  (By.CLASS_NAME,selector_value)
     elif  selector_by  = =  'link_text' :
         locator  =  (By.PARTIAL_LINK_TEXT,selector_value)
     elif  selector_by  = =  'tag_name' :
         locator  =  (By.TAG_NAME, selector_value)
     elif  selector_by  = =  'xpath' :
         locator  =  (By.XPATH,selector_value)
     elif  selector_by  = =  'css_selector' :
         locator  =  (By.CSS_SELECTOR,selector_value)
     else :
         raise  NameError( "Please enter a valid selector of targeting elements." )
     return  locator
 
find element方法
def  find( self ,key,value = ''):
     '''  定位到元素,返回元素對象,沒定位到,Timeout異常 loctor 傳元祖,如("id", "kw")  '''
     if  not  isinstance (key,  tuple ):
         locator  =  self .selector_to_locator(key)
     else :
         locator  =  key
     if  isinstance (locator,  tuple ):
         if  value ! =  '':
             ele  =  WebDriverWait( self .driver, setting.UI_WAIT_TIME).until(
                 ES.text_to_be_present_in_element_value(locator, value))
             return  ele
         else :
             ele  =  WebDriverWait( self .driver, setting.UI_WAIT_TIME).until(ES.presence_of_element_located(locator))
             if  ele:
                 return  ele
             else :
                 print (f "定位失敗:定位方式->{locator[0]}, value值->{locator[1]}" )
                 return  False
定位元素數據分離:

 

unittest介紹:

nittest中最核心的四個概念是:test fixture,test case, test suite, test runner 。

 

 

  1. unittest是Python自帶的單元測試框架,可以用其來作為自動化測試框架的用例組織執行框架
  2. unittest的流程:寫好TestCase,然后由TestLoader加載TestCase到TestSuite,然后由TextTestRunner來運行TestSuite,運行的結果保存在TextTestResult中
  3. 一個class繼承unittest.TestCase即是一個TestCase,其中以 test 開頭的方法在load時被加載為一個真正的TestCase。
  4. 用 setUp()tearDown()setUpClass()以及 tearDownClass()可以在用例執行前布置環境,以及在用例執行后清理環境
  5. 參數中加stream,可以將報告輸出到文件:可以用TextTestRunner輸出txt報告,以及可以用HTMLTestRunner輸出html報告

最終執行效果:


免責聲明!

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



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