首页 > 编程语言 > 详细

关于UI自动化框架python+selenium

时间:2021-08-03 18:40:04      阅读:14      评论:0      收藏:0      [点我收藏+]
  这是自己第一次写博客。为啥写呢,不太清楚。特殊的日子总得要有点特殊的痕迹才能记住。这个夏天真热,热的我都快忘了你的名字,你的样子,你的所有。
 
UI自动化介绍
    
1、目录介绍
project
└───config
|         |        config.ini
└───data
|         |        login_data.py
└───framework
|         |        base_page.py
|         |        driver.py
|         |        log.py
|         |        myunit.py
|         |        read_config.py
|         |        send_email.py
|         |        testreport.py
└───package
|         |        HTMLTestRunner.py
└───pageobjects
|         |       login_page.py
└───reports
|        └─── logs
|         |       screenshots
|         |      └───       fail
|         |      └───       pass
|        └─── testReports
└───testsuites
|         |        test_01_login
|         |        test_02_cgdw_index
|         getcwds.py
|        run_main.py
 
2、内容介绍
  • config.ini:配置文件,配置url,数据库等
  • data: 存放需要的页面元素,每个page页面对应一个*_data.py,例如login_page.py对应 login_data.py
  • framework:该目录下存放了一些公共配置函数及公共类。
                    base_page.py:用于存放封装的基础方法
                    driver.py:用于存放浏览器驱动   
                    log.py:记录日志的功能函数    
                    myunit.py:用于封装unittest中的方法,在执行用例文件中可以直接继承使用。    
                    read_config.py:用于读取config.ini中的配置文件
                    send_email.py:用于存放发送测试报告功能    
                    testreport.py:用于生产测试报告功能
  • package:用于存放自动化测试扩展包,例:HTMLTestRunner.py
  • pageobjects:页面目录, 可扩展, 针对不同模块的页面可设计不同目录结构。一般存放该页面的操作的API
  • reports
           logs:存放所有日志文件    
          screenshots:存放屏幕截图
                    fail:存放失败用例截图
                    pass:存放成功用例截图    
                     testreports:存放测试报告,为html形式,可右键通过浏览器打开,使用chrome效果尤佳
  •  testsuites:测试套件目录, 可扩展, 子目录为某个测试集。测试集中存放测试用例
  • getcwds.py:用于存放获取根目录路径类
  • run_main.py:存放组织用例, 生成测试套件, 运行测试用例等函数。  

3、常用基础方法二次封装

  • 截图功能:文件命名规则,结尾为_pass 或 _fail
  1. def get_img(self, filename):
    """获取截图"""
    abpath = getcwds.get_cwds()
    failimagepath = os.path.join(abpath, ‘reports\screenshots\fail‘)
    passimagepath = os.path.join(abpath, ‘reports\screenshots\pass‘)
    list_value = []
    lists = filename.split(‘.‘)
    for value in lists:
    list_value.append(value)
    if list_value[1] == ‘png‘ or list_value[1] == ‘jpg‘ or list_value[1] == ‘PNG‘ or list_value[1] == ‘JPG‘:
    if ‘fail‘ in list_value[0].split(‘_‘):
    try:
    self.driver.save_screenshot(os.path.join(failimagepath, filename))
    except Exception:
    log.logger.exception(‘保存截图失败 !‘, exc_info=True)
    else:
    log.logger.info(
    ‘截图 [%s] 成功保存在 [%s]‘ % (filename, failimagepath))
    elif ‘pass‘ in list_value[0]:
    try:
    self.driver.save_screenshot(os.path.join(passimagepath, filename))
    except Exception:
    log.logger.exception(‘保存截图失败 !‘, exc_info=True)
    else:
    log.logger.info(
    ‘截图 [%s] 成功保存在 [%s]‘ % (filename, passimagepath))
    else:
    log.logger.info(‘保存截图失败由于 [%s] 格式不正确‘ % filename)
    else:
    log.logger.info(
    ‘文件名 [%s] 格式不正确导致保存失败, 请检查!‘ % filename)
  • 查找元素
  1. def find_element(self, selector):
    """定位页面元素位置的方法"""
    by = selector[0]
    value = selector[1]
    element = None
    try:
    if by == ‘id‘ or by == ‘name‘ or by == ‘class‘ or by == ‘tag‘ or by == ‘link‘ or by == ‘plink‘ or by == ‘css‘ or by == ‘xpath‘:
    if by == ‘id‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_id(value)))
    elif by == ‘name‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_name(value)))
    elif by == ‘class‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_class_name(value)))
    elif by == ‘tag‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_tag_name(value)))
    elif by == ‘link‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_link_text(value)))
    elif by == ‘plink‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_partial_link_text(value)))
    elif by == ‘css‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_css_selector(value)))
    elif by == ‘xpath‘:
    element = WebDriverWait(self.driver, 10, 0.5).until(
    EC.visibility_of(self.driver.find_element_by_xpath(value)))
    else:
    raise NameError("请输入可查找的元素.")

    return element
    except Exception as e:
    log.logger.exception(‘查找元素超时:%s‘ % selector[1], exc_info=True)
    raise e
  • 文本输入内容
  • 清楚文本框内容
  • 点击元素
  • 点击列表中某一个元素
  • 获取文本内容
  • 获取窗口标签名
  • 浏览器前进
  • 浏览器后退
  • 获取当前url
  • 打开url
  • 切换窗口
  • 退出浏览器
  • 关闭浏览器

先到这里,以后用空再补充。我先去哭会。

 

关于UI自动化框架python+selenium

原文:https://www.cnblogs.com/qingxingy/p/15090554.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!