测试学习笔记(P123-P161教程from凡云教育)之UI自动化

P126

自动化测试用例设计原则:
1.自动化来覆盖需要重复的基本功能、基本业务流以及正向路径操作,避免复杂的异常测试、复杂业务流程;
2.尽量保持用力之间的独立性,最好不要依赖关系;
3.如果自动化测试进行了数据修改,测试执行完成之后尽量还原,避免对其他用例的影响;
4.每个自动化测试用例只验证一个功能点。

P127-129

Selenium 特点及配置安装、工作原理、简单示例
Location
Operation
Verification
Expect

P130
Webdriver 常用浏览器操作
打开 driver.get(url) 本地文件也可以,url需要写协议
关闭:driver.quit()结束进程或driver.close()仅关闭当前窗口
设置窗口大小:diver.set_window_size(200,500)
最大化窗口:driver.maximize_window()
获取网页源码:driver.page_source
获取窗口名称:driver.name
刷新页面:driver.refresh()
获取页面标题:driver.title
获取当前页面url:driver.current_url
获取当前页面截图:driver.get_screenshot_as_file(path)

P131-134
html基础知识
Head区域头部不可见
容器型元素:div form table
页面元素:a\img\input\select\checkbox\radio\textarea\submit……
Js:定义元素行为

P135-143
元素定位
find_element()
find_elements()[]
Class用于写样式,当元素的class有多个值时,不建议用class name定位
tag name 定位,用于查找同类型标签
Link text/partial link text,通过a标签的文本来定位链接
Console中可用用$x(“”)调试xptah
Console中可用用$$x(“”)调试xptah
css选择器定位:
elements = driver.find_element(‘css selector’, ‘class’)
Id用#,class直接写,父子关系用大于号,子孙关系用空格

P144

find_element 和 find_elements 区别
返回:第一个元素 列表形式返回所有元素
无元素返回:抛异常 空列表

P145

Webdriver常见元素操作
Clear
Send_keys
Click
Text
Get_attribute(name)
Is_displayed 返回布尔值,对元素属性是否可见做判断

P146-147

等待操作

强制等待:
import time
time.sleep(3)

隐式等待,全局有效,等待的时元素出现(存在,加载出该元素)
driver.implicitly_wait(3)

显示等待
多个等待同时存在,以等待时间最长的为准?
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC (设置等待条件)
写法
WebDriverWait(driver,10).until(EC.element_to_be_clickable((‘id’,’btn3’))

常见EC方法
title_is() 标签标题是否等于
title_contains() 标签标题是否包含
presence_of_element_located(locator) 判断某个元素是否被加入到dom中,但不等于该元素可见
visibility_of_element_located(locator) 判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽、高都不等于0
invisibility_of_element_located(locator) 判断某个元素是否不可见
element_to_be_clickable(locator) 判断某个元素是否可见并且是enable(一个属性)的,这样才能点击
text_to_be_present_in_element(locator): 判断某个元素中的text是否包含了预期的字符串

P148-149

常见元素操作

组合按键写法:
from selenium.webdriver.common.keys import Keys
send_keys(Keys.SHIFT, “fanyun”)
send_keys(Keys.CONTROL+’a’)

下拉框:
from selenium.webdriver.support.ui import Select
Select(driver.find_element(‘tag_name’,’select’)).select_by_visible_text(‘成都’)
P150-151
Frame
Switch_to.frame() 把当前定位的主体切换到另一个框架内部
Switch_to.default_content() 切回到默认框架

P152
文件上传
Webdriver 并未提供方法
Input标签处理思路
driver.get('https://www.camscanner.com/pdftoword')
driver.find_element('xpath', "//input[@accept= '.pdf']").send_keys(r'C:\Users\heliuhui\Desktop\000temp\fpheliuhi.pdf')

P153
多窗口切换
switch_to.window(handle)
ow = driver.current_window_handle
driver.switch_to.window(driver.window_handle[1])
driver.switch_to.window(ow)

P154-155
悬浮菜单操作

from selenium.webdriver.common.action_chains import ActionChains

driver.get('https://www.baidu.com/')
item = driver.find_element('id', 's-usersetting-top')
ActionChains(driver).move_to_element(item).perform()
driver.find_element('link text', '高级搜索').click()

ajax相关操作写法

driver.get('https://www.baidu.com/')
driver.find_element('id', 'kw').send_keys('python')
time.sleep(3)
menus = driver.find_elements('class name', 'bdsug-overflow')
time.sleep(3)
print(len(menus))

for menu in menus:
print(menu.text)

menus[3].click()

P156
验证码操作
解决方法:1. 去掉验证码(改代码,适用于未上线的项目);2. 固定验证码(适用于已上线项目)

P157
unittest框架,在ui自动化中的作用
1.在脚本中增加断言
2.通过框架对脚本进行管理
3.自定义测试报告
4.框架中做参数化

unittest框架使用规则
1.必须集成unittest.TestClass类
2.可以定义setUp(Class)和tearDown(Class)方法进行初始化
3.测试方法必须以test开头
4.pycharm自带该框架,也可以用普通方式运行
5.文件名不要命名unittest,影响使用

P158
setUpClass运行一次tearDownClass同理
setUp运行多次(用例个数)tearDown同理
测试方法执行顺序按照用例命名的字母顺序,比如testA()在testB()之前执行

P159-161

TestLoad类常用方法
loadTestsFromTestCase,加载类
loadTestsFromModule,加载模块(.py文件)
loadTestsFromNames,以名称加载测试方法
discover() 从路劲加载

加载类

import unittest 导入库
from unittestpractice import MyTestCase 导入测试用例

if name == 'main':
mc = unittest.defaultTestLoader.loadTestsFromTestCase(MyTestCase) 默认加载器加载测试用例
suite = unittest.TestSuite(mc) 组装
unittest.TextTestRunner().run(suite) 调用

加载模块

import unittest
import unittestpractice, unittestp2

if name == 'main':
names= [unittestpractice, unittestp2]
modules = []

for item in names:
    module = unittest.defaultTestLoader.loadTestsFromModule(item)
    modules.append(module)

suite = unittest.TestSuite(modules)
unittest.TextTestRunner().run(suite)
posted @ 2022-03-04 09:25  hello_mercy  阅读(160)  评论(0编辑  收藏  举报