python selenium2示例 - Page Object

作者: 苦叶子 | 来源:发表于2017-03-19 09:01 被阅读669次

    前言

    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进行自动化测试提供了坚实的基础。

    获取授权

    相关文章

      网友评论

        本文标题:python selenium2示例 - Page Object

        本文链接:https://www.haomeiwen.com/subject/cyylnttx.html