pageObject+unittest+selenium实现UI自动化测试

自闭症网瘾萝莉.ら 提交于 2020-02-05 08:40:04

1.为什么要使用pageObject设计模式
Page Object 模式是selenium自动化测试项目开发最佳测试设计模式,主要体现在对界面交互细节的封装,这样使得测试案例更加注重页面而不是界面细节。从而提高测试用例的可读性;减少了代码的重复;提高测试用例的可维护性,特别是针对UI频繁变动的项目。

2.设计思想
Page Object模式主要是将每个页面设计为一个类class,这个类包含页面中需要测试的元素(按钮、输入框、URL、标题等)和实际操作方法。

3.如何使用:例如登录qq邮箱的web页面
3.1.定义页面基础类,用于所有页面的基础,封装所有测试页面的公共方法。

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
class BasePage(object):
    def __init__(self,driver):
        self.base_url = 'https://mail.qq.com/'
        self.driver = driver
    def _open(self):
        url = self.base_url
        self.driver.get(url)
        #切换到登录窗口的iframe
        self.driver.switch_to.frame('login_frame')
    #定义open方法,调用_open(进行打开)
    def open(self):
        self._open()
    #定位方法封装
    def find_element(self,*loc):
        return self.driver.find_element(*loc)

Python方法中入参是元组时,需要加*。因为find_element()要转入很多不同的参数

3.2.定义页面具体功能类,每个测试页面元素定位和操作方法都在这层定义,若UI发生改变只需要在该层修改对象属性即可。

#创建loginPage类
class LoginPage(BasePage):
    #用户名元素
    username_loc = (By.ID,"u")
    #密码元素
    password_loc = (By.ID,"p")
    #登录按钮元素
    login_loc = (By.ID,"login_button")
    #输入用户名
    def type_username(self,username):
        self.find_element(*self.username_loc).clear()
        self.find_element(*self.username_loc).send_keys(username)
    #输入密码
    def type_password(self,password):
        self.find_element(*self.password_loc).send_keys(password)
    #点击登录按钮
    def type_login(self):
        self.find_element(*self.login_loc).click()

主要对登录页面元素进行封装,继承基础类:BasePage

3.3.在主程序中调用(使用unittest)

#coding=utf-8
from selenium import webdriver
from pageObject import LoginPage
import unittest
from time import sleep

class Test_login_model(unittest.TestCase):
    def setUp(self) :
        print("测试开始了...")
        #驱动设置
        self.driver = webdriver.Firefox()
        #实例化
        self.login_page = LoginPage(self.driver)
    # 将单个元素操作组成一个完整的动作,包含打开浏览器、输入用户名、密码、点击登录按钮等
    def user_login(self, username, password):
        self.login_page.open()
        self.login_page.type_username(username)
        self.login_page.type_password(password)
        self.login_page.type_login()
    #用例1:登录成功
    def test_login1_success(self):
        self.user_login('xx','xxxx')
    #用例2:用户名为空
    def test_login2_username_null(self):
        self.user_login('', 'xxxx')
    #用例3:
    def test_login3_password_null(self):
        self.user_login('xx', '.')
    @unittest.skip("不需要运行")
    # 用例4:
    def test_login4_null(self):
        self.user_login('', '.')
    # 用例5:
    def test_login5_password_error(self):
        self.user_login('xx', 'xxxxxxxxxxxxxxxx')
    #结束测试
    def tearDown(self):
        sleep(3)
        self.driver.quit()
        print("测试结束了...")
        
if __name__ == '__main__':
    unittest.main()

编写unittest测试用例,必须test*格式

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!