首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python selenium2示例 - Page Object Model

前言

python selenium2是当前主流的web自动化测试框架,提供了多浏览器的支持(chrome、ie、firefox、safari等等),同时支持多种编程语言来写用例(python、ruby、java等等),非常容易上手,但当大家在深入应用时,会发现随着代码量的增加,感觉整个用例测试代码的维护会会越来越庞大,例如:

如上代码在随着进一步新增测试用例的情况会有以下几个问题:

1、易读性,一连串的find element会显得杂乱无章

2、可扩展不好:用例孤立,难以扩展

3、可复用性:无公共方法,很那复用

4、可维护性:一旦页面元素变化,需要维护修改大量的用例

Page模式

基于上述问题,我们采用自动化测试的一种设计模式来进行一定层面的解决,这就是Page模式。什么是Page模式呢?它大概应该长成这样子,如图所示:

POM

Page模式的核心要素:

1、抽象封装一个BasePage基类,基类应该拥有一个指向webdriver实例的属性

2、每一个Page都应该继承BasePage,并通过driver来管理本Page的元素,且将Page才操作都封装成一个个的方法

3、TestCase应该继成unittest.Testcase类,并依赖相应的Page类来实现相应的test step(即测试步骤)

BasePage代码示例如下:

# BaePage class BasePage(object): def __init__(self, driver): self.driver = driver

登录Page代码示例如下:

class LoginPage(BasePage): # 登录pange元素维护 username = (By.ID, "username") password = (By.ID, "pass") login_btn = (By.ID, "loginBtn") def set_username(self, username): # 输入用户名 name= self.driver.find_element(*LoginPage.usename) name.send_keys(username) def set_password(self, password): # 输入密码 pwd= self.driver.find_element(*LoginPage.password) pwd.send_keys(password) def click_login(self): # 单击登录 loginbtn= self.driver.find_element(*LoginPage.login_btn) loginbtn.click()

TestCase代码示例如下:

class Test_Login(unittest.TestCase): #Setup 初始化 def setUp(self): self.driver = webdriver.Chrome(r'C:\\chromedriver.exe') self.driver.implicitly_wait(30) self.base_url = "http://127.0.0.1:9000/" #tearDown 清理 def tearDown(self): self.driver.close() def test_Login(self): #Step1: 打开登录页 self.driver.get(self.base_url) #Step2: 初始化登录Page login_page = BasePage.LoginPage(self.driver) #Step3: 输入用户名 login_page.set_username("admin") #Step4: 输入密码 login_page.set_password("passwd") #Step5: 单击登录按钮 login_page.click_login()

主运行程序代码:

if__name__=="__main__": unittest.main()

至此整个Page模式演示就完成了。再来回顾下上述两种方式的代码组织,是不是Page模式的魅力更大?

结束语

Page模式给我们提供了一种很好的设计模式,实现了用例和页面的分离,降低了耦合,提高了内聚,为后续更大规模的应用python selenium2进行自动化测试提供了坚实的基础。

下一篇
举报
领券