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