自动化测试unittest+selenium+HTMLTestRunner
import unittest
class foeTest(unittest.TestCase):
@classmethod ##整个类的初始化
def setUpClass(cls) -> None:#前置条件
print('--------初始化整个类-------------\n')
@classmethod #释放整个类
def tearDownClass(cls) -> None:#后置条件
print('----------释放整个类-----------')
def setUp(self) -> None:####一个用例的初始化
print('>>>>>>>>>>初始化开始<<<<<<<<')
def tearDown(self) -> None:
print('>>>>>>>>>释放<<<<<<<<<')
def test_a(self):
print('测试用例1')
def test_b(self):
print('测试用例2')
def lat(self,a,b):#unittest以test命名才能执行用例,普通函数可以调用在用例中,但不能直接执行,可以通过测试函数调用
c = a+b
print(c)
def test_c(self):
print(self.lat(3,4))
if __name__ == '__main__':
unittest.main()
skip()用法:
在case中,对于不需要用例或者特定条件下不执行的用例,可以应用skip()来实现有条件执行,或者绝对性跳过,用于对指定用例进行不执行操作。
import unittest
@unittest.skip('就是不想执行测试,任性')#装饰在一个用例之前,一个装饰只对一个用例函数生效,跳过这个用例执行,并输出理由。
def test_2(self):
print(2)
@unittest.skipIf(1>2,'这是if的理由')#前面的条件如果为true则不执行skip,如果为false执行跳过并返回理由
def test_3(self):
print(3)
@unittest.skipUnless(1>2,'这是Unless的理由')#与skipIf相反,前面条件为True则执行skip,如果为false则执行函数
def test_4(self):
print(4)
@unittest.expectedFailure#如果执行用例失败,则不计入失败的case中。
def test_5(self):
print(5)
self.assertEqual(3,4,msg='NotEqual')
安装selenium包
pip install -U selenium
三个chromedriver 下载地址:
1、http://chromedriver.storage.googleapis.com/index.html
2、https://npm.taobao.org/mirrors/chromedriver/
3、https://www.jb51.net/softs/538241.html
selenium + python 中文文档
01定位元素
selenium8种定位方式:
driver.find_element_by_id() ##id
driver.find_element_by_name() ##name
driver.find_elements_by_class_name() # class
driver.find_element_by_link_text() # link
driver.find_element_by_partial_link_text() #超链接
driver.find_element_by_xpath() # xpath
driver.find_element_by_css_selector() # css
driver.find_element_by_tag_name() # 标签
02控制浏览器
##----------------全屏
driver.maximize_window()
#
03鼠标和键盘操作事件
#####导入ActionChains包
from selenium.webdriver.common.action_chains import ActionChains
#####鼠标事件-----------ActionChains类提供了鼠标操作的常用方法
perform() :执行所有ActionChains 中存储的行为
context_click() :右击
double_click() :双击
drag_and_drop() :拖动
move_to_element() :鼠标悬停
#####键盘事件
#使用键盘方法前先导入keys类
from selenium.webdriver.conmmon.keys import Keys
clear() :清除文本
send_keys(value) :模拟按键输入value = Ctrl+A,Ctrl+C
11 driver.find_element_by_id('kw').send_keys('selenium') #在搜索框中输入"selenium"
12 driver.find_element_by_id('kw').send_keys(Keys.SPACE) #输入空格键
13 driver.find_element_by_id('kw').send_keys('python') #在搜索框中输入"python"
14 driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a') #输入Control+a模拟全选
15 driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'c') #输入Control+c模拟复制
16 driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v') #输入Control+v模拟粘贴
17 driver.find_element_by_id('kw').send_keys(Keys.ENTER) #输入回车代替点击搜索按钮
click() :点击元素
submit() :用于提交表单。
size :返回元素的尺寸
text :获取元素的文本
get_attribute(name) :获得属性值
is_displayed() :设置该元素是否用户可见
04获取验证信息
05警告框处理
#警告框处理方法:
#text:返回(获取)alert、confirm、prompt中的文字信息
#accept():接受现有的警告框
#dismiss():解散现有的警告框
#send_keys(keysToSend):发送文本至警告框
dr.find_element_by_link_text('搜索设置').click()
dr.find_element_by_css_selector("#gxszButton > a.prefpanelgo")
sleep(5)
dr.find_element_by_link_text("保存设置").click()
dr.switch_to.alert.accept()
dr.switch_to.alert.dismiss()
dr.switch_to.alert.send_keys('fsdfsf')
print(dr.switch_to.alert.text)
sleep(2)
06多表单切换
#switch_to.frame/iframe() 定位到框架
#switch_to_default_content()方法返回到主页面
dr.find_element_by_css_selector("#switchAccountLogin").click()
dr.switch_to.frame(dr.find_element_by_xpath("//iframe[starts-with(@id,'x-URS-iframe')]"))
dr.find_element_by_name("email").send_keys("10424089")
dr.find_element_by_name('password').send_keys('trtrertetrrtr')
dr.switch_to.default_content()
#xpath 定位方法: xpath : ("//标签名[ @属性= "属性值"]")
# driver.find_element_by_xpath
# ("//div[contains(@id, 'btn-attention')]")
# driver.find_element_by_xpath
# ("//div[starts-with(@id, 'btn-attention')]")
# driver.find_element_by_xpath
# ("//div[ends-with(@id, 'btn-attention')]")
# # 这个需要结尾是‘btn-attention’
# contains(a, b) 如果a中含有字符串b,则返回true,否则返回false
# starts-with(a, b) 如果a是以字符串b开头,返回true,否则返回false
# ends-with(a, b) 如果a是以字符串b结尾,返回true,否则返回false
07窗口截图和切换窗口
#将截图保存在一个位置
dr.get_screenshot_as_file(文件路径+自定义名字+格式)
HTMLTestRunner
下载HTMLTestRunner包