Python+Selenium框架设计篇
比如测试一个登陆页面:盛祺登录 ,执行测试的人员传递不同的数据到帐号、密码框就可以了,而不应该去顾虑:
页面是否已经加载完成?怎样定位到帐号输入框?怎样定位到登陆按钮等等问题。
这些问题全部交由登陆页面的“页面对象”去解决并封装起来,只提供给测试人员三个接口方法:1.帐号输入接口、
2.密码输入接口、3.提交接口。
运行的文件:xl_login.py
xl_login.py
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2020/12/18
@author: ctt
Project: Python+Selenium框架设计篇
比如测试一个登陆页面:盛祺登录 ,执行测试的人员传递不同的数据到帐号、密码框就可以了,而不应该去顾虑:
页面是否已经加载完成?怎样定位到帐号输入框?怎样定位到登陆按钮等等问题。
这些问题全部交由登陆页面的“页面对象”去解决并封装起来,只提供给测试人员三个接口方法:1.帐号输入接口、2.密码输入接口、3.提交接口。
'''
# 3.导入模块
from selenium import webdriver
from selenium.webdriver.common.by import By
from basePage import BasePage
import time
class LoginPage(BasePage):
"""
盛祺首页登陆页面
继承自基础页面BasePage
"""
# 点击帐号输入框
showAccount_loc = (By.ID, 'showAccount')
# 定位帐号输入框
username_loc = (By.ID, 'userAccount')
# 点击密码输入框
showPassword_loc = (By.ID, 'showPassword')
# 定位密码输入框
password_loc = (By.ID, 'userPassword')
# 定位登陆按钮
submit_loc = (By.XPATH, '//*[@id="dengluBtn"]')
# 点击账号输入框操作
def type_showAccount(self):
self.find_element(*self.showAccount_loc).click()
# 输入用户名操作
def type_username(self, username):
self.find_element(*self.username_loc).send_keys(username)
# 点击密码输入框操作
def type_showPassword(self):
self.find_element(*self.showPassword_loc).click()
# 输入密码操作
def type_password(self, password):
self.find_element(*self.password_loc).send_keys(password)
# 点击登陆按钮操作
def submit(self):
self.find_element(*self.submit_loc).click()
if __name__ == '__main__': # 测试登陆
# 预打开页面
base_url = '自己的网址'
# 页面title
title = '广东财经大学资产管理系统'
# 准备好待输入的用户名和密码
username = 'ctt'
password = '123456'
# 打开Chrome浏览器
driver = webdriver.Firefox()
driver.maximize_window()
# 登陆页面初始化
login = LoginPage(driver, base_url, title)
# 打开盛祺登录首页
login.open()
# 点击用户名输入框
login.type_showAccount()
# 输入用户名
login.type_username(username)
# 点击密码输入框
login.type_showPassword()
# 输入密码
login.type_password(password)
# 点击登陆
login.submit()
time.sleep(2)
driver.quit()
basePage.py 文件内容
# coding=utf-8🔥
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 3.导入模块
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BasePage(object):
"""
基础页面,提供给其他页面继承
"""
def __init__(self, driver, base_url, title):
"""
初始化
"""
self.driver = driver
self.base_url = base_url
self.title = title
def _open(self, url):
"""
私有方法,打开url参数指定的页面,
并检查打开是否正确
"""
self.driver.get(url)
# 显式等待10秒,如果打开页title与预期不符或者超时,抛出异常
WebDriverWait(self.driver, 10).until(EC.title_is(self.title))
def open(self):
"""
公共方法,调用私有方法_open()打开链接
"""
self._open(self.base_url)
def find_element(self, *loc):
"""
定位指定元素
"""
# 显式等待元素,超过10秒未找到则抛出超时异常(TimeoutException)
# presence_of_element_located: 不关心元素是否可见,只关心元素是否存在在页面中
# visibility_of_element_located: 不仅找到元素,并且该元素必须可见
WebDriverWait(self.driver, 15).until(EC.visibility_of_element_located(loc))
return self.driver.find_element(*loc)
if __name__ == '__main__':
driver = webdriver.Firefox()
driver.maximize_window()
page = BasePage(driver, '自己网址','自己网址的标题')
page.open()
driver.quit()
目录结构