Page Object简介
Page Object设计模式的思想是,将元素定位与元素操作分层。当元素发生改变时,只需要维护元素定位层的代码,而无需关心都有哪些用例使用了这个元素。
这一节对于工作中要写测试代码的人来说很重要。我们最好在开始编写测试代码之前,就要为将来方便的进行代码维护做准备。
脚本例子
元素定位模块,命名为BaiduPage:
from selenium import webdriver
class BaiduPage():
def __init__(self,driver):
self.driver=driver
def open(self):
self.driver.get("https://www.baidu.com/")
def search_input(self,keys):
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys(keys)
def search_click(self):
self.driver.find_element_by_id("su").click()
def link_news(self):
self.driver.find_element_by_link_text("新闻").click()
def link_hao123(self):
self.driver.find_element_by_link_text("hao123").click()
元素操作模块,命名为TestBaidu:
import unittest
import time
from BaiduPage import BaiduPage
from selenium import webdriver
class TestBaidu(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver=webdriver.Chrome()
cls.mypage=BaiduPage(cls.driver)
def setUp(self):
self.mypage.open()
time.sleep(3)
def test_1_search(self):
self.mypage.search_input("page object")
self.mypage.search_click()
def test_2_news(self):
self.mypage.link_news()
def test_3_hao123(self):
self.mypage.link_hao123()
def tearDown(self):
time.sleep(3)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__=="__main__":
unittest.main()
脚本说明
例子中将测试代码分为两部分,
第一部分为BaiduPage,对百度首页中包含的元素定位以及对元素的常用操作进行定义。
第二部分为TestBaidu,是主要的测试代码部分,当测试中需要对页面元素进行操作时,只需调用BaiduPage中的方法即可。
一些随想
1、由于在学习阶段,所以写的例子都是很短的。当真正测试的时候,测试代码必然很多,这时一个好的设计模式的优势会体现出来。
2、我记得有一本书上写到,在估算自动化测试所需要的时间人力等成本时,不但要考虑自动化测试脚本编写和执行的时间,也要考虑后期测试脚本维护的时间成本,因为测试脚本必然不是执行一次就不再使用了,而是需要不断的维护的。代码写的不够好,如果是自己维护还勉强,虽然改的时候很繁琐,但知道那是当初自己给自己造出来的麻烦。但如果是别人来维护,可千万别让人家有想揍你的冲动。哈哈哈。