Selenium + Python 自动化测试20(PO模式)

        我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。

上一篇我们讨论了数据驱动测试中如何读取各种不同的文件中数据,以及如何完成重复的测试实例,今天我们继续学习。

         本篇笔记我们讨论一下如何使用PO模式思想来编写测试用例脚本。以便我们的测试代码更容易维护。

1、PO基础知识

1)PO:page object简述

 的简称,是selenium 自动化测试项目开发的最佳设计模式之一。它主要是通过对界面交互细节的封装。这样测试用例对应的脚本更关注与业务本身,也提高测试用例的可读性。

1)PO模式的优点:

a,可以减少代码的重复率

b,提高测试用例脚本的可读性

c,提高测试用例脚本的可维护性

2、page object 实例

1)page object 原理

         page object 原理是:我们将page 对象封装成一个HTML页面,通过应用程序特定API来操作页面元素。page 对象应该将GUI控件上查询和操作数据的行为封装为方法。这样就是页面的布局发生变化,page对象的接口并不会发生变化

2)page object实例-登录

我们先贴出来之前登录的例子:

# coding=utf-8

#****************登录模块*******************

import time

from selenium import webdriver

def driver_func():

        return webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")

class Login():

        def __init__(self,username,password):

                self.username=username

                self.password=password


        def login(self):

                driver = driver_func()

                # 打开浏览器,并最大化

                driver.get("https://www.saucedemo.com/")

                driver.maximize_window()

                time.sleep(3)


                # 输入用户名,

                driver.find_element_by_name("user-name").send_keys(self.username)  # by name 定位

                # 输入密码

                driver.find_element_by_name("password").send_keys(self.password)  # by name 定位

                # 点击登录按钮

                driver.find_element_by_id("login-button").click()  # by ID 定位

                return driver

上面的登录的例子是参考模块化,用于后面来调用。

         我们PO模式大概步骤:写page类(封装所有页面共有的方法)>编写login 类(继承page类,封装登录操作需要的元素定位和操作)>编写测试用例脚本(如登录,调用login类)

请参考基础类:

#编写页面类,封装所有页面共有的方法

class Page(object):

    login_url="https://www.saucedemo.com"


    def __init__(self,selenium_driver,base_page_url=login_url): #初始化方法来定义驱动,URL和超时时间

        self.base_page_url=base_page_url

        self.driver = selenium_driver

        self.timeout = 30


    def _open(self,url):

        url = self.base_page_url +url

        self.driver.get(url)

        assert self.on_page(),"没有打开%s"%url


    def on_page(self):

        return  self.driver.current_url==(self.base_page_url + self.url)


    def open(self):

        self._open(self.url)


    def find_element(self,*loc):

        return self.driver.find_element(*loc)

login 页面类:

class LoginPage(Page):


    url = "/"

    #定位元素

    username_loc=(By.NAME,"user-name")

    password_loc=(By.NAME,"password")

    submit_loc =(By.ID,"login-button")


    #操作方法封装

    def enter_username(self,username):

        self.find_element(*self.username_loc).send_keys(username)


    def enter_password(self,password):

        self.find_element(*self.password_loc).send_keys(password)


    def submit(self):

        self.find_element(*self.submit_loc).click()

执行测试函数:

def test_login_Y(driver,username,password):



    login_page=LoginPage(driver)

    login_page.open()

    login_page.enter_username(username)

    login_page.enter_password(password)

    login_page.submit()


if __name__ == "__main__":

    driver = webdriver.Chrome("C:\\Users\\dewi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")


    username = 'standard_user'

    password = 'secret_sauce'

    test_login_Y(driver, username, password)

    time.sleep(3)


    UIResult = driver.find_element_by_xpath('//*[@id="header_container"]/div[2]/span').text

    assert ("Products" == UIResult), "密码正确登录验证失败,fail"

    driver.quit()

今天就先学习到这里吧。后面我们再做优化,如PO模式和数据驱动整合在一起,自动输出HTML报告等。

每天进步一点点,加油!

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立黄昏粥可温

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值