Python+Selenium+unittest+HTMLReport的WEBUI自动化测试框架

一、项目结构如下图


1、把需要的页面元素放到yml文件进中行配置的几大好处

(1).每个页面可操作的元素是固定,放在yml中只写一个,每次拿的时候进行调用,即使元素改变,只要修改yml中的元素即可,不需要改代码,除非逻辑变了。

(2).重复使用只需要调用“元素名称”即可拿到元素,可以重复使用。

二、用例

import unittest
from drivers.page import Page

class TestLogin(unittest.TestCase):

    def __init__(self, *args, **kwargs):
        unittest.TestCase.__init__(self, *args, **kwargs)

    @classmethod
    def setUpClass(cls):
        cls.home_page = Page(pagefile="homepage", browser_type='chrome').get("https://www.baidu.com/")
        cls.journalism_page = Page(page=cls.home_page, pagefile="journalismpage")

    @classmethod
    def tearDownClass(cls):
        cls.home_page.quit()

    def tearDown(self):
        self.home_page.screen_shot()

    def test01(self):
        self.home_page.page_el("journalism_by_xpath").click()
        self.journalism_page.page_el("girl_by_xpath").click()
        self.journalism_page.page_el("baiduinput_by_xpath").send_keys("蔡依林")
        self.journalism_page.page_el("baidubotton_by_xpath").click()

初始化页面的时候传入页面yml文件名,以及所需要用到浏览器,在调用.get()方法打开浏览器获取driver返回给第一个操作的页面home_page ,拿到页面后可以调用方法   page_el() 传入yml中封装的元素名称即刻返回元素进行操作。

如果是跳转到了第二个页面需要传入两个参数,一个是上一个页面的,一个是页面yml元素名称,即可拿到页面进行操作

三、页面

# 浏览器页面类,主要进行浏览器页面的控制,包括获取
class Page(Browser):
    def __init__(self, page=None, browser_type='firefox', pagefile=None):
        if page:
            self.driver = page.driver
        else:
            super(Page, self).__init__(browser_type=browser_type)
        self.config_page = Config()
        pageelymlfile = self.config_page.get('pageelymlfile')
        elpage = Config(os.path.join(BASE_PATH, 'pageel', pageelymlfile + ".yml")).get(pagefile)
        self.el = Config(os.path.join(BASE_PATH, 'pageel', elpage + ".yml"))
 #中间代码忽略,只留关键代码
    # 寻找指定元素
    def find_element(self, *args):
        return self.driver.find_element(*args)

    # 获取元素跟据不同的类型查找方式查找,需要后期增加
    def page_el(self, str_el):
        logger().info("元素名称" + str_el)
        eltype = str_el.split('_')[2]
        if eltype == 'xpath':
            str_el = "(By.XPATH,'" + self.el.get("pageel")[str_el] + "')"
            logger().info("查找元素" + str_el)
            el = self.find_element(*eval(str_el))
        if eltype == 'ID':
            str_el = "(By.ID,'" + self.el.get("pageel")[str_el] + "')"
            logger().info("查找元素" + str_el)
            el = self.find_element(*eval(str_el))
        return el

Page是公用的,拿每个页面的时候都要用到,driver的初始化这里是入口。

__init__()方法:参数一page,如果没传初始化driver,如果传了就不初始化,拿传入页面中的driver

                         参数二 browser_type,默认为firefox浏览器

                         参数三pagefile,页面对应得yml文件名

page_el()方法:传入元素名拿到指定得元素,调用find_element()方法返回元素

四、页面元素

规则:

1.所有元素都在pageel下

2.元素名称规定,名称_by_元素类型

五、运行测试产生报告

HTMLReport+ unittest

注:学艺不精,不喜勿喷

 

源码:https://github.com/wantgroup/WebUiTest

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值