python selenium2示例 - Page Object Model

前言

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

python selenium2示例 - Page Object Model_第1张图片

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

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

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

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

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

Page模式

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

python selenium2示例 - Page Object Model_第2张图片
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进行自动化测试提供了坚实的基础。

获取授权

你可能感兴趣的:(python selenium2示例 - Page Object Model)