? ? ? ? 在进行web自动化测试前,我们需要注意哪些方面呢?我们简单的操作流程是怎么样的呢?今天就来简单的介绍,并记录下吧,以方便复习使用。
一、web自动化测试实战
1、web自动化测试流程
(1)需求分析(熟系业务,最好已经做过多次手工测试,对项目了解)
(2)自动化测试方案 ==>
? -目的 (提高效率?减少人工成本?)
-主要应用场景,(在那方面进行自动化测试,主要注意点)
-主要功能使用模块 ,(评估在什么功能、模块适合做自动化测试?)
-技术选型和对比(Python/java、selenium/playwright、pytest/unittest...
po模式、数据驱动、关键字驱动...并做对比,列举优势
-方案特点和优势 (简单列举测试时间的优化?)
-具体运行手册(环境搭建并介绍)
-产出和效率(用例、数据、时间节点)
-运行策略 (Jenkins、git?)
-维护空间,优化 (自动化测试平台、工具?)
(3)用例编写和自动化用例提取 (手工测试流程?)
(4)用例评审
(5)运行用例(代码编写,封装、PO模式、Basepage)
(6)测试报告 (allure运行,报告优化)
2、自动化测试使用场景
(1)需求稳定,不会频繁变更 (2)研发和测试周期长,需频繁执行回归测试 (3)须在多平台上重复运行相同的场景(接口、兼容性测试) (4)某些测试项目通过手工测试无法实现,或手工成本太高 (5)被测软件的开发较为规范,能保证系统的可测试性
3、自动化测试工程效果
(1)实现代码
(2)易于维护
(3)节约劳力
web自动化测试,其操作就是:同手工测试提取自动化测试
(1)功能 ==>熟悉、了解
(2)web自动化做主流程测试
(3)手工的用例(xmind、excel)==>转化为自动化用例(test_函数)
二、常见web自动化测试面试题
1、八大元素定位的方式
driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_class_name()
driver.find_element_by_xpath()
driver.find_element_by_css_selector()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_tag_name()
优先顺序:
id ==> name ==> class_name ==> xpath ==> css ==> link ==> partial_link ==> tag_name
栗子:
elem = driver.find_element_by_id('kw')
print(elem) # 表一元素对象
2、find_element 和 find_elements的区别
1、find_element 得到的是一个webelement的对象,只会返回查找到的第一个对象;
find_elements 得到的是一个列表(返回),返回查找到的所有,并保存到一列表中
2、如找不到,
print(driver.find_element_by_id('kw')) find_element 会报错,NoSuch ElementException
print(driver.find_elements_by_id('kw')) find_elements 不会报错,但是会返回空列表
3、当我们想验证通过某个表达式,能否找到元素,判断页面是否存在元素
# find_element 不存在会报错 ,可通过try...except...进行捕获
try:
driver.find_element_by_id('kw')
print('元素存在')
except:
print('元素不存在')
# find_elements 得到的是一列表,条件不满足是,可通过条件判断,返回True、False
if driver.find_elements_by_id('kw')
print('元素存在')
else:
print('元素不存在')
在自动化测试中,一般使用find_element,不加s会更常见
3、xpath元素定位有哪些方法
1、基本用法://input[@name='q']
2、and组合属性://input[@name='q' and @type='anony_srh']
3、单斜杠(/),通过父代找子带://div[@id='kw']/div[@class='anony_srh']
4、双斜杠(//),通过祖先找子孙元素://div[@id='kw']//div[@class='anony_srh']
5、..通过自带找父代元素://div[@class='anony_srh']/..
6、通过text文本,获取元素://a[text()='百度'] ==》可不用@,因为它不是属性 =====> 全部匹配
7、text()常与contains组合使用://a[contains(text(),'百度')] =======> 部分匹配
//a[contains(@class,'anony')]
8、索引(需加括号):(//a[contains(text(),'百度')])[1] ,从1开始
9、轴运算,常用 following_sibling(元素之后,弟弟)、//*[@class='account-form-3rd-hd']//following_sibling::div
preceding_sibling(元素之前,哥哥)、//[@class='account-form-3rd-hd']//preceding_sibling::div
ancestor(祖先)://a//ancestor::div[@id='anony-srh']
10、*任意标签下的条件,//*[@id='kw']
4、xpath和css选择器,各有什么优势?
1、css写法更简洁;
2、css速度更快;
3、css不支持文本定位;
4、xpath功能更强大;
5、xpath对于复杂的元素定位更简单
5、web自动化测试要点
1、点点点(鼠标操作 ==> 点击、悬停、拖拽、双击、单击等操作),可通过ActionChains(driver),进行调用;
2、用户输入(输入信息、单选、多选、select下拉框操作)
3、控件(日期选择。。),文件上传
4、验证码;
5、窗口滚动
各种浏览器的操作,selenium、cypress、playwright、puppeter等,封装浏览器都是类似的;
6、报错,无法定位元素,出现的原因可能有哪些?
1、先确认元素定位表达式是否正确,通过在浏览器中,点击ctrl + f 查找元素,看是否唯一;
2、表达式正确,查看是否设置了等待(隐形等待 driver.implicity_wait(10),强制等待 time.sleep(2);)
3、元素是否在另一个窗口( 切换至最新窗口:driver.switch_to.window(driver.window_handles[-1]) )
4、元素是否存在在iframe中,进行iframe切换: driver.switch_to.frame(xx)
5、元素是否为动态变化,(表达式可能为变化),可不通过动态变化元素进行定位
7、验证码问题
1、先让开发关闭验证码;
2、让开发设置万能验证码;
3、第三方解码平台,超级鹰;
4、生产环境下,通过手工测试,进行验证;
总结
先简单记录,之后再补充吧。
坚持坚持再坚持,一定可以的,多远都可以到达。fighting~~11!!
|