100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Selenium基于Python web自动化测试框架 —— PO模型

Selenium基于Python web自动化测试框架 —— PO模型

时间:2018-11-16 03:32:14

相关推荐

Selenium基于Python web自动化测试框架 —— PO模型

目录

1、前言:

2、PO模型的概念和理解:

3、PO模型的目录结构:

4、PO代码示例:

5、总结

6、重点:配套学习资料和视频教学

1、前言:

关于selenium测试框架首先想到的就是PO模型,简单说下PO模型

2、PO模型的概念和理解:

PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息、相关操作都放到一个类中,从而使具体的测试用例变成了简单的调用和验证操作。

优点:进行了拆分和分层

缺点:对于复杂的业务page层变了,case也需要去改动

3、PO模型的目录结构:

其中,base_page是login_page、search_page的基础。test_login调用login_page,login_page调用base_page,同理test_search。

4、PO代码示例:

base_page.py

from selenium.webdriver.support.wait import WebDriverWait'''这个类主要是完成所有页面的一些公共方法的封装'''class Action(object):#初始化def __init__(self,se_driver):self.driver = se_driver#定义open方法def open(self,url):self.driver.get(url)self.driver.maximize_window()#重写元素定位的方法def find_element(self,*loc):try:WebDriverWait(self.driver,20).until(lambda driver:driver.find_element(*loc).is_displayed())return self.driver.find_element(*loc)except Exception as e:print("未找到%s"%(self,loc))#定义script方法,用于执行js脚本def script(self,src):self.driver.execute_script(src)#重写send_keys方法def send_keys(self,loc,value,clear_first=True,clik_first=True):try:if clik_first:self.find_element(*loc).click()if clear_first:self.find_element(*loc).clear()self.find_element(*loc).send_keys(value)except AttributeError:print("未找到%s"%(self,loc))

login_page.py

from mon.by import Byfrom seleniumframework.PO import base_pageimport timeclass LoginPage(base_page.Action):link_loc = (By.LINK_TEXT,"登录")name_loc = (By.ID,"TANGRAM__PSP_8__userName")password_loc = (By.ID,"TANGRAM__PSP_8__password")submit_loc = (By.ID,"TANGRAM__PSP_8__submit")username_top = (By.LINK_TEXT,"hanxiaobei")def click_link(self):self.find_element(*self.link_loc).click()time.sleep(3) #等待3秒,等待登录弹窗加载完成def run_case(self,value1,value2):self.find_element(*self.name_loc).send_keys(value1)self.find_element(*self.password_loc).send_keys(value2)time.sleep(20)#手动输入验证码self.find_element(*self.submit_loc).click()time.sleep(5) #等待5秒,登录后的页面加载完成def get_username(self):return self.find_element(*self.username_top).text

test_login.py

import unittestfrom selenium import webdriverfrom seleniumframework.PO.login_page import LoginPageimport timeclass TestBaiduLogin(unittest.TestCase):"""UI自动化登录"""def setUp(self):self.url = ""self.driver = webdriver.Firefox()self.driver.implicitly_wait(20)# self.verificationErrors = []def tearDown(self):time.sleep(5)self.driver.quit()# self.assertEqual([],self.verificationErrors)def test_login(self):"""百度登录"""sp = LoginPage(self.driver)sp.open(self.url)sp.click_link()sp.run_case("hanxiaobei","xxxxxxx")self.assertEqual(sp.get_username(),"hanxiaobei",msg="验证失败!")

main.py 运行的主入口

import unittestimport HTMLTestRunner#相对路径testcase_path = ".\\testcase"report_path = ".\\report\\report.html"def creat_suite():uit = unittest.TestSuite()discover = unittest.defaultTestLoader.discover(testcase_path,pattern="test_*.py")for test_suite in discover:# print(test_suite)for test_case in test_suite:uit.addTest(test_case)return uitsuite = creat_suite()fp = open(report_path,"wb")runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title="测试结果",description="测试搜索结果")runner.run(suite)fp.close()

解决报告命名的问题:

1 now = time.strftime("%Y-%m-%d-%H-%M-%S",time.localtime(time.time()))2 print(now)3 report_path = ".\\report\\"+now+"report.html"

测试报告截图:

search_page.py

from mon.by import Byfrom seleniumframework.PO import base_page#继承base后既可以调用base的方法也可自己添加新的方法class SearchPage(base_page.Action):#通过id进行定位元素search_loc = (By.ID,"kw")def run_case(self,value):#第一种利用原生的send_keys方法self.find_element(*self.search_loc).send_keys(value)#第二种利用二次封装的send_keys方法# self.send_keys(self.search_loc,value)

test_search.py

import unittestfrom selenium import webdriverfrom seleniumframework.PO.search_page import SearchPageimport timeclass TestBaiduSearch(unittest.TestCase):"""UI自动化搜索"""def setUp(self):self.url = ""self.driver = webdriver.Firefox()self.driver.implicitly_wait(20)self.verificationErrors = []def tearDown(self):time.sleep(5)self.driver.quit()self.assertEqual([],self.verificationErrors)def test_search(self):"""搜索测试关键字"""sp = SearchPage(self.driver)sp.open(self.url)sp.run_case("测试")

5、总结

感谢每一个认真阅读我文章的人!!!

如果下面这些资料用得到的话可以直接拿走:

1、自学开发或者测试必备的完整项目源码与环境

2、测试工作中所有模板(测试计划、测试用例、测试报告等)

3、软件测试经典面试题

4、Python/Java自动化测试实战.pdf

5、Jmeter/postman接口测试全套视频获取

6、Python学习路线图

6、重点:配套学习资料和视频教学

那么在这里我也精心准备了上述大纲的详细资料包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。如下,需要的点击下方群名片加入群聊免费领取

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。