软件测试Python

[Py_20]自动化测试设计模式之Page Object案例实践

2018-07-21  本文已影响43人  Fighting_001

一、Page Object简介

Page Object:是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素和功能模块的封装减少冗余代码,利于后期维护项目。
如:元素定位or功能模块发生变化,只需要调整页面元素or功能模块封装的代码,提高测试用例的可维护性。

二、PageObject之案例实践

案例:实现在所搭建的测试站点首页(http://localhost/)进行登录验证
1.创建PageObject目录,在其下新建3个python模块文件:BasePage.py, LoginPage.py, LoginTest.py
2.在BasePage.py模块中创建页面的基础类Page类,包含:对Page类初始化方法、打开不同子页面的方法、封装元素定位的方法
3.在LoginPage.py模块中创建首页登录页面的类,包含:设置定位器、用户名输入框元素的操作方法、密码输入框元素的操作方法、登录提交按钮的操作方法。并将登录功能模块的方法进行封装,实现测试传入的用户名和密码进行登录是否正常的效果
4.在LoginTest.py模块中传入登录的用户名和密码的值,然后调用LoginPage.py模块中封装的登录方法test_user_login(),以实现登录功能,验证通过用户名和密码是否可正常登录

自动化测试站点搭建,可参看此文 Selenium的4种自动化测试模型&测试站点搭建

BasePage.py

from time import sleep

'''创建页面基础类'''
class Page():
    # 初始化
    def __init__(self,driver):
       self.base_url = "http://localhost"
       self.driver = driver
       self.timeout = 10

    # 定义打开不同的子页面方法
    # 下划线开头的_open()方法代表私有方法,不可直接调用,防止被随意修改
    def _open(self,u_para):
        url = self.base_url+u_para
        print("Test page is: %s" %url)
        self.driver.maximize_window()
        self.driver.get(url)
        sleep(2)
        assert self.driver.current_url==url,"Did not land on %s" %url

    # 定义公开的open()方法,实现调用_pen(urlPara)方法
    def open(self):
        self._open(self.u_para)

    # 封装元素定位的方法
    def find_element(self,*loc): # 定位的方式、定位的属性可变化
        return self.driver.find_element(*loc)

LoginPage.py

from BasePage import *
from selenium.webdriver.common.by import By

'''创建首页登录页面的类'''
class LoginPage(Page):
    u_para = '/' # 当调用open()方法时相当于构造的url="http://localhost/"

    # 设置定位器
    username_loc = (By.NAME,"username")
    password_loc = (By.NAME,"password")
    submit_loc = (By.NAME,"Submit")

    # 定义username输入框元素的定位、输入方法
    def type_username(self,username):
        self.find_element(*self.username_loc).clear() # 调用find_element()方法,username定位器变量作为参数传入
        self.find_element(*self.username_loc).send_keys(username) # 输入username参数值

    # 定义password输入框元素的定位、输入方法
    def type_password(self,password):
        self.find_element(*self.password_loc).clear()
        self.find_element(*self.password_loc).send_keys(password)

    # 定义Submit按钮元素的点击方法
    def type_submit(self):
        self.find_element(*self.submit_loc).click()

# 封装登录功能模块的方法
'''测试用户名和密码是否可以正常登录'''
def test_user_login(driver,username,password):
    login_page = LoginPage(driver) # login_page作为LoginPage类的对象;LoginPage类继承Page基类,需要传入driver参数进行初始化
    login_page.open() # 直接调用[LoginPage继承BasePage模块中的open()方法],实现打开构造的url

    login_page.type_username(username)
    login_page.type_password(password)
    login_page.type_submit()

LoginTest.py

from LoginPage import *
from selenium import webdriver

driver = webdriver.Chrome()

username = "Test001"
password = "123456"
test_user_login(driver,username,password)
sleep(3)

driver.quit()

执行结果:

PyCharm运行输出的结果 登录成功的提示 登录成功
上一篇下一篇

猜你喜欢

热点阅读