selenium python自动化测试框架_Selenium基于Python web自动化测试框架 -- PO

本文详细介绍了Selenium测试框架中的Page Object(PO)模型,包括其概念、优缺点以及目录结构。PO模型提倡按页面组织代码,简化测试用例。示例展示了BasePage、LoginPage和SearchPage的实现,以及如何在测试用例中调用这些页面对象。此外,还给出了自动化测试报告的生成方法。
摘要由CSDN通过智能技术生成

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

PO模型的概念和理解:

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

优点:进行了拆分和分层

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

PO模型的目录结构:

808721-20170424091111209-237653499.png

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

PO代码示例:

base_page.py

1 fromselenium.webdriver.support.wait import WebDriverWait2

3 '''4 这个类主要是完成所有页面的一些公共方法的封装5 '''6 class Action(object):7 #初始化8 def __init__(self,se_driver):9 self.driver =se_driver10

11 #定义open方法12 def open(self,url):13 self.driver.get(url)14 self.driver.maximize_window()15

16 #重写元素定位的方法17 def find_element(self,*loc):18 try:19 WebDriverWait(self.driver,20).until(lambda driver:driver.find_element(*loc).is_displayed())20 return self.driver.find_element(*loc)21 except Exception ase:22 print("未找到%s"%(self,loc))23

24 #定义script方法,用于执行js脚本25 def script(self,src):26 self.driver.execute_script(src)27

28 #重写send_keys方法29 def send_keys(self,loc,value,clear_first=True,clik_first=True):30 try:31 ifclik_first:32 self.find_element(*loc).click()33 ifclear_first:34 self.find_element(*loc).clear()35 self.find_element(*loc).send_keys(value)36 except AttributeError:37 print("未找到%s"%(self,loc))

login_page.py

1 fromselenium.webdriver.common.by import By2 fromseleniumframework.PO import base_page3 import time4

5 classLoginPage(base_page.Action):6 link_loc = (By.LINK_TEXT,"登录")7 name_loc = (By.ID,"TANGRAM__PSP_8__userName")8 password_loc = (By.ID,"TANGRAM__PSP_8__password")9 submit_loc = (By.ID,"TANGRAM__PSP_8__submit")10

11 username_top = (By.LINK_TEXT,"hanxiaobei")12

13

14 def click_link(self):15 self.find_element(*self.link_loc).click()16 time.sleep(3) #等待3秒,等待登录弹窗加载完成17

18 def run_case(self,value1,value2):19 self.find_element(*self.name_loc).send_keys(value1)20 self.find_element(*self.password_loc).send_keys(value2)21 time.sleep(20) #手动输入验证码22 self.find_element(*self.submit_loc).click()23 time.sleep(5) #等待5秒,登录后的页面加载完成24

25 def get_username(self):26 return self.find_element(*self.username_top).text

test_login.py

1 import unittest2 fromselenium import webdriver3 fromseleniumframework.PO.login_page import LoginPage4 import time5

6 classTestBaiduLogin(unittest.TestCase):7 """UI自动化登录"""

8 def setUp(self):9 self.url = "http://www.baidu.com"

10 self.driver =webdriver.Firefox()11 self.driver.implicitly_wait(20)12 # self.verificationErrors =[]13

14 def tearDown(self):15 time.sleep(5)16 self.driver.quit()17 # self.assertEqual([],self.verificationErrors)18

19 def test_login(self):20 """百度登录"""

21 sp =LoginPage(self.driver)22 sp.open(self.url)23 sp.click_link()24 sp.run_case("hanxiaobei","xxxxxxx")25 self.assertEqual(sp.get_username(),"hanxiaobei",msg="验证失败!")

main.py 运行的主入口

1 import unittest2 import HTMLTestRunner3

4 #相对路径5 testcase_path = ".\\testcase"

6 report_path = ".\\report\\report.html"

7 def creat_suite():8 uit =unittest.TestSuite()9 discover = unittest.defaultTestLoader.discover(testcase_path,pattern="test_*.py")10 for test_suite indiscover:11 # print(test_suite)12 for test_case intest_suite:13 uit.addTest(test_case)14 returnuit15

16 suite =creat_suite()17 fp = open(report_path,"wb")18 runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title="测试结果",description="测试搜索结果")19 runner.run(suite)20 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"

测试报告截图:

808721-20170424093512959-723137558.png

search_page.py

1 fromselenium.webdriver.common.by import By2 fromseleniumframework.PO import base_page3

4 #继承base后既可以调用base的方法也可自己添加新的方法5 classSearchPage(base_page.Action):6

7 #通过id进行定位元素8 search_loc = (By.ID,"kw")9

10 def run_case(self,value):11 #第一种利用原生的send_keys方法12 self.find_element(*self.search_loc).send_keys(value)13

14 #第二种利用二次封装的send_keys方法15 # self.send_keys(self.search_loc,value)

test_search.py

1 import unittest2 fromselenium import webdriver3 fromseleniumframework.PO.search_page import SearchPage4 import time5

6 classTestBaiduSearch(unittest.TestCase):7 """UI自动化搜索"""

8 def setUp(self):9 self.url = "http://www.baidu.com"

10 self.driver =webdriver.Firefox()11 self.driver.implicitly_wait(20)12 self.verificationErrors =[]13

14 def tearDown(self):15 time.sleep(5)16 self.driver.quit()17 self.assertEqual([],self.verificationErrors)18

19 def test_search(self):20 """搜索测试关键字"""

21 sp =SearchPage(self.driver)22 sp.open(self.url)23 sp.run_case("测试")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值