电商平台 Python + unittest + Selenium
·
基于登录的自动化测试
登录正向和反向用例如何区分
1、思路:在测试用例中添加一个标识正向案例和逆向案例的标记:False,True
步骤:
-
调用登录方法(输入,点击登录)
-
判断是否正向用例:
-
判断安全退出是否存在
-
点击安全退出
-
点击登录链接
-
-
否则:
-
获取登录异常信息
-
断言操作
-
点击异常提示框
-
-
base
-
基类
-
page页面的一些公共的方法
-
点击方法
-
输入方法
-
获取文本方法
-
截图方法
-
判断元素是否找到
-
-
-
方法以base开头
-
可以用于下一个项目的
-
-
page
-
页面对象
-
一个页面封装一个对象
-
继承Base
-
-
-
实现
-
1、模块名:Page+实际操作模块名称
-
page_login.py
-
-
2、页面对象名
-
以打驼峰方法将模块名抄一遍,去掉下划线
-
-
3、方法
-
涉及到元素,将每个元素单独封装成一个方法
-
-
4、组装
-
根据需求组装以上步骤
-
-
-
登录:
-
点击登录链接
-
输入用户名
-
输入密码
-
输入验证码
-
点击登录按键
-
成功:跳转页面,可以找到退出信息
-
点击安全退出
-
并点击登录链接
-
-
失败:提示信息弹出
-
获取提示信息,断言
-
点击确认
-
注意有无iframe嵌套以及页面切换
-
-
-
-
测试脚本
-
使用夹具,每一次测试用例执行之前初始化driver,点击登录链接
-
结束后,关闭驱动
-
Base基类
'''
基类
点击方法
输入方法
获取信息方法
截图方法
提高复用率
'''
import os
os.environ['SE_DRIVER_MIRROR_URL'] = 'https://cdn.npmmirror.com/binaries/chrome-for-testing'
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
class Base:
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.get('http://192.168.174.181/')
#查找元素
def base_find_lement(self,loc,timeout=30,pol=0.5):
#loc为变量
return WebDriverWait(self.driver, timeout, pol).until(lambda x:x.find_element(*loc))
#点击
def base_clik(self,loc):
self.base_find_lement(loc).click()
#输入
def base_input(self,loc,value):
#查找元素
ele = self.base_find_lement(loc)
#清空
ele.clear()
#输入元素
ele.send_keys(value)
#获取错误信息文本
def base_get_text(self,loc):
#查找元素
return self.base_find_lement(loc).text
#打印
#获取截图
def base_get_image(self):
self.driver.get_screenshot_as_file('../image/1.png')
# 判断元素是否存在 方法封装
def base_ele_is_exist(self, loc):
try:
self.base_find_lement(loc, timeout=2)
return True # 代表元素存在
except:
return False # 代表元素不存在
page类
from selenium.webdriver.common.by import By from v4 import page from v4.base.base import Base class PageLogin(Base): #点击登录链接 def page_click_login_link(self): self.base_clik(page.login_link) #输入用户名 def page_input_usr(self,name): self.base_input(page.login_uername,name) #输入密码 def page_input_pwd(self,pwd): self.base_input(page.login_pwd,pwd) #输入验证码 def page_input_vrycode(self,code): self.base_input(page.login_verify_code,code) #点击登录 def page_input_login(self): self.base_clik(page.login_link) #获取异常信息 确认 def page_get_erro_info(self): self.base_get_text(page.login_err_info) def page_click_erro_btn_ok(self): self.base_clik(page.login_err_info_ok) #截图 def page_get_screeshot(self): self.base_get_image() #点击安全退出 ---》》推出使用 def page_click_logout(self): self.base_clik(page.login_layout) #判断是否登录成功 def page_is_login_success(self): #登录成功,返回True # return self.base_ele_is_exist(page.login_layout) #组合业务逻辑(输入+点击登录) def page_login(self,usrname,pwd,verify_code): self.page_input_usr(usrname) self.page_input_pwd(pwd) self.page_input_vrycode(verify_code) self.page_input_login()
init.py
from selenium.webdriver.common.by import By login_link= By.LINK_TEXT,'登录' login_uername = By.ID,'username' login_pwd = By.ID,'password' login_verify_code = By.ID,'verify_code' login_btn = By.CSS_SELECTOR,'a[class="J-login-submit"]' login_err_info = By.CSS_SELECTOR,'[class="layui-layer-content layui-layer-padding"]' login_err_info_ok = By.CSS_SELECTOR,'.layui-layer-btn0' login_layout = By.CSS_SELECTOR,'[href="/Home/user/logout.html"]'
测试脚本
import unittest
from v4.page.page import PageLogin
from parameterized import parameterized
def get_data():
return [('13188888761','12345','8888','验证码错误','False'),
('13188888763', '12345', '8888', '验证码错误','False')
]
class TestLogin(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
#打开浏览器,初始化driver
cls.login = PageLogin()
#点击登录链接
cls.login.page_click_login_link()
@classmethod
def tearDownClass(cls) -> None:
#关闭驱动对象
cls.login.driver.quit()
@parameterized.expand(get_data())
def test_login_ok(self,usrname,pwd,verfify_code,expect_result,success):
#调用登录方法
if success:
try:
self.assertTrue(self.login.page_is_login_success())
self.login.page_click_logout()
except:
self.login.page_get_screeshot()
#判断安全退出是否存在-存在,点击,退出;不存在,
#获取安全退出
else:
self.login.page_login(usrname, pwd, verfify_code)
# 获取登录提示信息
msg = self.login.page_get_erro_info()
try:
self.assertIn(expect_result, msg)
except:
self.login.page_get_screeshot()更多推荐




所有评论(0)