在自动化中, Selenium 自动化测试中有一个名字经常被提及 PageObject( 思想与面向对象的特征相 同 ) ,通常 PO 模型可以大大提高测试用例的维护效率
 
优点:可重用,业务和对象分离,代码结构清晰,方便代码维护
 

 
核心要素
 
1. 在 PO 模式中抽离封装集成一个BasePage 类,该基类应该拥有一个只实现 webdriver 实例的属性
 
2. 每一个 page 都继承 BasePage ,通过 driver 来管理本 page 中元素,将 page 中的操作封装成一个个方法
 
3.TestCase 继承 unittest.Testcase 类,并依赖 page 类,从而实现相应的测试步骤
 
PO 实现进入百度页面输入数据后进入下一个页面
 
组织代码
 

 
 
 
1 :实现 BasePage
 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | fromselenium importwebdriver
 fromselenium.webdriver.common.action_chains importActionChains #鼠标操作
 classBasePage():
     '''
     BasePage封装所有界面都公用的方法。
     例如driver,find_element等
     '''
     # 实例化BasePage类时,事先执行的__init__方法,该方法需要传递参数
     def__init__(self,driver,url):
         self.driver =driver
         self.base_url =url
     # 进入网址
     defget(self):
         self.driver.get(self.base_url)
     #元素定位,替代八大定位
     defget_element(self,*locator):
         returnself.driver.find_element(*locator)
     #点击
     defleft_click(self,*locator):
         ActionChains(self.driver).click(self.get_element(*locator)).perform()
     #输入
     defsend_text(self,text,*locator):
         self.driver.find_element(*locator).send_keys(text)
     #清除
     defclear_text(self, *locator):
         self.driver.find_element(*locator).clear()
     # 表单切换
     defswitch_iframe(self,*locator):
         self.driver.switch_to.frame(self.driver.find_element(*locator))
     #窗口切换
     defswitch_window(self,n):
         self.driver.switch_to.window(self.driver.window_handles[n])
 | 
 
2 :实现 SearchPage
 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | fromselenium.webdriver.common.by importBy
 frombase.base_page importBasePage
 classSearchOne(BasePage):
     def__init__(self,driver,url):
         BasePage.__init__(self,driver,url)
     #进入百度
     defopen_baidu(self):
         self.get()
     #输入数据
     definput_search_content(self,text):
         self.send_text(text,By.ID,"kw")
     # 点击按钮
     defclick_baidu_search(self):
         self.left_click(By.ID, "su")
     defclick_open_hao(self):
         self.left_click(By.XPATH,".//*[@id='1']/h3/a[1]")
 | 
 
3 :实现 TestCase
 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | importunittest
 fromselenium importwebdriver
 frompage.page_one importSearchOne
 frompage.page_two importSearchTwo
 classBaiBu(unittest.TestCase):
     @classmethod
     defsetUpClass(cls) -> None:
         cls.driver =webdriver.Firefox()
         cls.driver.implicitly_wait(10)
     deftest001(self):
         url="http://www.baidu.com"
         s =SearchOne(self.driver,url)
         s.open_baidu()
         s.input_search_content("123")
         s.click_baidu_search()
         s.click_open_hao()
         self.driver.switch_to.window(self.driver.window_handles[1])
     deftest002(self):
         s=SearchTwo(self.driver,"")
         s.open_baidu_map()
     deftearDown(self) -> None:
     #      self.driver.quit()
         pass
 if__name__ =='__main__':
     unittest.main()
 | 
 
PO 模式的优点
 
1:PO 提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰
 
2 :页面对象与用例分离,使得我们更好的复用对象
 
3 :可复用的页面方法代码会变得更加优化
 
4 :更加有效的命令方式使得我们更加清晰的知道方法所操作的 UI 元素
 
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
 
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】
 

 
