项目结构如图
data目录下放的是测试相关的数据;report目录下放的是测试报告和错误截图;test_case目录存放的是测试用例和相关模块。models目录中存放的是一些公共函数和类,pageObj目录中存放的是基本类和测试页面类,a_login_sta.py为测试用例文件。
启动浏览器驱动
from selenium import webdriver
def test_browser():
driver = webdriver.Chrome()
return driver
if __name__ == '__main__':
dr = test_browser()
dr.get('http://.........')
dr.quit()
from driver import test_browser
import unittest
class TestClass(unittest.TestCase):
def setUp(self):
self.driver = test_browser()
self.driver.maximize_window()
def tearDown(self):
self.driver.quit()
参考文章https://blog.csdn.net/Missshi/article/details/103874916
# 创建基础类
class Page(object):
crm_url = 'http://.........'
# 初始化
def __init__(self, driver, base_url=crm_url):
self.base_url = base_url
self.driver = driver
self.timeout = 30
# 定义打开页面方法
def __open(self):
url = self.base_url
self.driver.get(url)
# 定义open方法,调用__open方法
def open(self):
self.__open()
# 定义定位方法
def find_element(self, *loc):
return self.driver.find_element(*loc)
def find_elements(self, *loc):
return self.driver.find_elements(*loc)
创建登录页面对象,对页面上的元素定位做一个封装,另外定义统一的登录方法。
from selenium.webdriver.common.by import By
from base import Page
import time
#创建登录页面类
class loginPage(Page):
username_loc = (By.CSS_SELECTOR, ".form-label:nth-child(1) .input-class")
password_loc = (By.CSS_SELECTOR, ".form-label:nth-child(2) .input-class")
login_loc = (By.CSS_SELECTOR, ".submit-btn")
#输入用户名
def type_username(self, username):
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()
#查找断言需要的字段
user_login_success_loc = (By.CSS_SELECTOR, "#user-menu-btn > .user-name")
def user_login_success(self):
return self.find_element(*self.user_login_success_loc).text
#定义统一登录方法
def user_login(self, username='...', password='.....'):
self.open()
self.type_username(username)
self.type_password(password)
self.type_login()
time.sleep(5)
创建测试用例类,TestLogin继承了myunit的TestClass类,这样就每次都会执行setUp和tearDown。
import time, unittest
from test_case.models import myunit, function
from test_case.pageObj.loginPage import loginPage
class TestLogin(myunit.TestClass):
'''登录测试'''
def user_login_verify(self, username='', password=''):
loginPage(self.driver).user_login(username, password)
def test_login(self):
self.user_login_verify(username='....',password='.....')
# 判断是否登录成功
time.sleep(10)
po = loginPage(self.driver)
try:
#此处用到loginPage.py中的查找断言元素的方法
self.assertEqual(po.user_login_success(), "系统管理员")
except Exception as e:
#如果断言失败则截图,调用function.py中的截图方法
function.test_takeScreenshot(self.driver, function.test_currentTime())
if __name__ == '__main__':
unittest.main()
执行测试用例文件,参考文章https://blog.csdn.net/Missshi/article/details/103875304