一、项目结构如下图
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