页面对象设计模式:UI自动化测试框架设计 框架设计使用到的设计模式是:页面对象设计模式,pageobject
页面对象设计的三个优势:
创建可以跨多个测试用例共享的代码
减少重复代码的数量
如果用户界面发生了维护,我们只需要维护一个地方,这样修改以及维护的成本相对而言是比较低的
base:基础层,主要编写的是底层元素封装
page:对象层,主要指的是把页面的每一个交互写成一个独立的方法
test:测试层,里面主要编写测试用例
common:公共方法,把公共的方法分离到这个里面
utils:工具类,主要指的是操作一些工具的类
data:把测试过程中的数据存储在这个目录下
report:测试报告,主要指的是存储生成的HTML的测试报告
创建一个新的项目pa'geObject,在pageObject中创建以下包和文件夹:
到base中创建软件包base.py,再写入基础代码:
from selenium import webdriver
from selenium.webdriver.support.expected_conditions import NoSuchElementException
from selenium.webdriver.common.by import By
import time as t
class WebDriver(object):
def __init__(self,driver):
# self.driver=webdriver.Chrome()
self.driver=driver
def findElement(self,*loc):
'''单个元素的定位方式'''
try:
return self.driver.find_element(*loc)
except NoSuchElementException as e:
return e.args[0]
def findElements(self,*loc):
'''多个元素的定位方式'''
try:
return self.driver.find_elements(*loc)
except NoSuchElementException as e:
return e.args[0]
再到对象层page中创建一个软件包login.py,再写入代码,调用base.py中的元素:
from base.base import *
from selenium.webdriver.common.by import By
class Login(WebDriver):
username=(By.ID,'freename')
password=(By.ID,'freepassword')
loginButton=(By.CLASS_NAME,'loginBtn')
userError = (By.XPATH, '/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
def sendUsername(self,username):
t.sleep(1)
self.findElement(*self.username).send_keys(username)
def sendPassword(self,password):
t.sleep(1)
self.findElement(*self.password).send_keys(password)
def clickLogin(self):
t.sleep(1)
'''点击登录按钮'''
self.findElement(*self.loginButton).click()
def getUserError(self):
t.sleep(1)
'''获取用户名一栏的错误提示信息'''
return self.findElement(*self.userError).text
再到测试层tset中创建一个软件包test_login.py,再写入代码,调用page中的元素:
import unittest
from page.login import Login
from selenium import webdriver
class LoginTest(unittest.TestCase,Login):
def setUp(self) -> None:
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.get('https://mail.sina.com.cn/#')
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
self.driver.close()
def test_user_mull(self):
'''登陆验证:验证用户名信息为空的错误提示信息'''
self.sendUsername('')
self.clickLogin()
self.assertEqual(self.getUserError(),'请输入邮箱名')
def test_email_fromat(self):
'''登陆验证:邮箱名称不符合规范'''
self.sendUsername('sadad')
self.clickLogin()
self.assertEqual(self.getUserError(),'您输入的邮箱名格式不正确')
def test_user_passward_error(self):
'''登陆验证:密码和账号不匹配'''
self.sendUsername('[email protected]')
self.sendPassword('1235')
self.clickLogin()
self.assertEqual(self.getUserError(),'登录名或密码错误')