Web自动化测试(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Web自动化测试(一)

  • 前言
  • 一、自动化相关理论
        • 1.什么是自动化以及它的好处
        • 2.什么是软件测试
        • 3.什么是自动化测试
        • 4.自动化测试能解决什么问题
        • 4.自动化测试分类
        • 5.什么Web项目适合做自动化测试
        • 6.Web自动化测试所属分类
        • 7.主流的Web自动化测试化工具
  • 二、Selenium
        • 1.特点
        • 2.发展历程
        • 3.环境搭建
        • 4.第一个案例
  • 三、Selenium元素定位
        • 1.为什么使用元素定位
        • 2.定位工具
        • 3.定位元素时依赖什么
        • 4.定位方式
        • 5.id定位
        • 6.name定位
        • 7.class_name定位
        • 8.tag_name定位
        • 9.link_text定位
        • 10.PARTIAL_link_text定位
        • 11.XPath定位
        • 12.CSS定位
        • 13.定位一组元素
  • 四、Selenium元素操作
  • 五、浏览器常用操作API
  • 六、获取元素信息
  • 七、鼠标键盘操作
        • 1.为什么使用鼠标操作
        • 2.鼠标事件对应的方法在哪个类中
        • 3.鼠标事件常用的操作方法
        • 4.键盘操作
        • 5.元素等待
  • 总结


前言

在当今数字化浪潮汹涌澎湃的时代,互联网已然成为人们生活与工作不可或缺的关键部分。各类 Web 应用如雨后春笋般不断涌现,从日常购物的电商平台,到协同办公的各类软件即服务(SaaS)工具,再到社交娱乐的多元应用,其功能的复杂性和交互的频繁度持续攀升。这一动态变化不仅对开发者提出了严苛挑战,更让保障应用质量与用户体验成为横亘在测试团队面前的一座峻岭。
当我们踏上探索 Web 自动化测试这一征程,绝非浅尝辄止于工具的机械运用,而是深入剖析从测试策略精心擘画,到脚本匠心雕琢,再到执行结果深度剖析的全生命周期逻辑。在后续篇章,我们将层层拆解自动化测试架构的搭建奥秘,手把手带你遴选契合项目特性的工具集,分享实战场景里疑难症结的破解要诀,一同见证如何借自动化之力让 Web 应用品质脱胎换骨,从容应对瞬息万变的数字市场严苛试炼,为用户呈上流畅无瑕的线上交互盛宴。此刻,且随我一同揭开 Web 自动化测试的神秘面纱,开启这段满是惊喜与收获的求知旅程。


一、自动化相关理论

1.什么是自动化以及它的好处
       自动化是指让机器代替人为完成指定目标。
   好处:
       1.减少劳动力
       2.提高效率
       3.规格统一标准
       4.提高产品质量
2.什么是软件测试
       校验系统是否满足规定需求,弄清预期结果与实际结果的区别。
3.什么是自动化测试
       让程序代替人工去验证系统功能的过程
   好处:
       1.较少时间内运行更多的测试用例
       2.自动化脚本可重复运行
       3.减少人为操作失误
       4.克服手工测试的局限性
   误区:
       1.自动化测试可以完全代替手工测试
       2.自动化测试一定比手工测试厉害
       3.自动化测试可以发掘更多BUG
       4.自动化测试适用于更多功能
4.自动化测试能解决什么问题
       1.回归测试:项目在发布新版本之后对项目之前的功能进行测试
       2.压力测试:可以理解为多用户同时去操作软件,统计软件服务器处理多用户请求功能
       3.兼容性测试:不同浏览器(IE,Firefox,chrome等),分辨率,操作系统等
       4.提高测试效率,保证产品质量
4.自动化测试分类
     1.web-自动化测试
     2.移动自动化测试
     3.接口-自动化测试
     4.单元测试-自动化测试
5.什么Web项目适合做自动化测试
     1.需求变动不频繁
     2.项目周期长
     3.项目需要回归测试
6.Web自动化测试所属分类
      Web自动化测试属于黑盒测试(功能测试)
     1.黑盒测试(功能测试)
     2.白盒测试(单元测试)
     3.灰盒测试(接口测试)
7.主流的Web自动化测试化工具
     1.QTP(收费)(支持web和桌面软件自动化)
     2.Selenium(免费 开源)(只支持web项目)
     3.Robot Framework(基于Python的可拓展关键字驱动的测试自动化框架)

二、Selenium

1.特点
     1.开源软件:源代码开放可以根据需求来增加工具的某些功能
     2.跨平台:linux,windows,mac
     3.支持多种浏览器:Firebox,Chrome,IE,Edge,Opera
     4.支持多种语言:Python,Java,C#,JavaScript,Ruby
     5.成熟稳定:目前已经被google,百度,腾讯等公司广泛应用
     6.功能强大:能够实现了类似商业工具的大部分功能,因为开源性,可实现定制化功能
2.发展历程
     1.selenium1.0
       (1) selenium IDE(录制自动化代码工具)
       (2) selenium Grid(分布式工具,同时启动多个浏览器)
       (3) selenium RC(通过JS模拟浏览器,实现自动化方式)
     2.selenium2.0(稳定推荐版)
       selenium1.0+WebDriver
     3.selenium3.0
       2.0升级版,支持Java,windows10,Edge浏览器,safa浏览器
     无论是2.0还是3.0编写的自动化脚本,API方法是不变的,唯一不同就是环境不同
3.环境搭建
     1.安装selenium
       pip install selenium
     2.浏览器的安装即驱动(注意:要根据浏览器版本找对应的浏览器驱动)
     3.将驱动器添加到环境变量中
4.第一个案例
#导包
from selenium import webriver
from time import sleep
#获取浏览器驱动
driver = webdriver.Firefox()
#打开url
driver.get('http://baidu.com')
#暂停3秒
sleep(3)
#退出驱动
driver.quit()

三、Selenium元素定位

1.为什么使用元素定位
   要使用web自动化操作元素,必须首先找到此元素。
2.定位工具
  1.火狐:firebug
  2.谷歌:f12(开发者工具)
3.定位元素时依赖什么
  1.标签名
  2.属性
  3.层级
  4.路径
4.定位方式
  1.id
  2.name
  3.class_name(使用元素的class)
  4.tag_name(标签名称)
  5.link_text(定位超链接 a标签)
  6.partial_link_text(定位超链接 a标签 模糊匹配)
  7.xpath(基于元素路径)
  8.css(元素选择器)
  基于元素属性特有的定位方式(id/name/class_name/)
  基于元素标签名称定位(tag_name)
  基于超链接文本定位(link_text/partial_link_text)
  基于元素路径定位(xpath)
  基于选择器(css)
5.id定位
  通过元素id的属性定位,id一般情况下在当前页面是唯一的。
  语法:driver.find_element(By.ID,"id")
#导包
from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By

#获取浏览器对象
driver = webdriver.Firefox()
#打开本地页面
url = "file:///D:/BaiduNetdiskDownload/web%E8%87%AA%E5%8A%A8%E5%8C%96_day01_%E8%AF%BE%E4%BB%B6+%E7%AC%94%E8%AE%B0+%E8%B5%84%E6%96%99+%E4%BB%A3%E7%A0%81/web%E8%87%AA%E5%8A%A8%E5%8C%96_day01_%E8%AF%BE%E4%BB%B6+%E7%AC%94%E8%AE%B0+%E8%B5%84%E6%96%99+%E4%BB%A3%E7%A0%81/02_%E5%85%B6%E4%BB%96%E8%B5%84%E6%96%99/%E6%B3%A8%E5%86%8CA.html"
driver.get(url)
#查找用户名
username = driver.find_element(By.ID,"userA")
#查找密码
password = driver.find_element(By.ID,"passwordA")
#用户名输入admin(send_keys("内容"))
username.send_keys("admin")
#密码输入123456
password.send_keys("123456")
#暂停3秒
sleep(3)
#退出浏览器驱动
driver.quit()
6.name定位
  通过元素name的属性定位
  语法:driver.find_element(By.NAME,"name")
7.class_name定位
  通过元素class的属性定位.
  语法:driver.find_element(By.CLASS_NAME,"class_name")
8.tag_name定位
  通过元素标签名来定位,如果存在多个标签取第一个
  语法:driver.find_element(By.TAG_NAME,"tag_name")
9.link_text定位
  定位超链接标签,只能使用精准匹配(a标签的全部文本内容)
  语法:driver.find_element(By.LINK_TEXT,"a标签的全部文本内容")
10.PARTIAL_link_text定位
  定位超链接标签,可以使用精准或者模糊匹配,最好只用唯一关键词(如果多个值,默认返回第一个)
  语法:driver.find_element(By.PARTIAL_LINK_TEXT,"a标签的文本内容")
11.XPath定位
  基于元素路径定位
  语法:driver.find_element(By.XPATH,"路径")
  常用的定位策略:
      (1)路径:
              绝对路径:以单斜杠开头逐级开始填写,不能跳级
              相对路径:以双斜杠开头后跟元素名称,不知元素名称可用*代替
      (2)路径结合属性:所有属性都要使用@修饰([@id='id'])
      (3)路径结合逻辑(多个属性)://*[@id='id'and@属性=‘属性值’]
      (4)路径结合层级://*[@id="父类id值"]/input
  一般建议使用指定标签名称,*效率比较慢
  无论绝对路径还是相对路径,/后面都要跟元素名称或者*
  在工作中如果能使用相对路径绝对不使用绝对路径
  拓展:
      (1)//*[text()='xxx'] 定位文本值等于xxx的元素,一般适用p标签和a标签
      (2)//*[contains(@属性,'xxx')] 定位包含xxx的元素
      (3)//*[start-with(@属性,‘xxx’)] 定位以xxx开头的元素
12.CSS定位
  CSS是一种标记语言,焦点数据的样式
  通过CSS选择器进行定位
  极力推荐使用,查找元素效率比XPath高,语法比XPath简单
  id选择器:元素必须有id属性  
      语法:#id
  class选择器:元素必须有class属性
      语法:.class
  元素选择器:element
   属性选择器:[属性名='属性值']
   层级选择器:p > input     p input
       >与空格的区别:大于嗨必须为子元素,空格则不用
   拓展:
       [属性^=‘开头的字母’]  获取指定属性以指定字母开头的元素
       [属性$='结尾的字母'] 获取指定属性以指定字母结尾的元素
       [属性*=‘包含的字母’] 获取指定属性包含指定字母的元素
13.定位一组元素
 语法:driver.find_elements()
返回结果:类型位列表,要对列表进行访问和操作必须指定下标进行遍历

四、Selenium元素操作

(1)输入方法:send_keys()
(2)点击方法:click()
(3)清空方法:clear()
在输入操作之前一定要清空

五、浏览器常用操作API

(1)最大化窗口:maximize_window()
(2)设置窗口大小:set_window_size()
(3)设置窗口位置:set_window_position()
(4)后退:back()
(5)前进:forword()
(6)刷新:refresh()
(7)关闭当前页面:close()
(8)关闭由driver对象启动的所有窗口:quit()
(9)获取页面Title:title()
(10)获取当前页面url:current_url()

六、获取元素信息

(1)获取元素大小:size
(2)获取元素文本:text
(3)获取元素属性:get_attribute("元素属性名")
(4)元素是否可见:is_displayed()
(5)元素是否可用:is_enabled
(6)元素是否被选中:is_selected
text和size调用时无括号

七、鼠标键盘操作

1.为什么使用鼠标操作
为了满足丰富的html鼠标效果,必须使用对应方法
2.鼠标事件对应的方法在哪个类中
ActionChain类中---->导包
3.鼠标事件常用的操作方法
(1)右击:context_click(element).perform()
(2)双击:double_click(element).perform()
(3)拖拽:drag_and_drop(sorch,target).perform()
		拓展:drag_and_drop_by_offset(sourch,xofffser=,yoffset=).perform()
(4)悬停:move_to_element(element).perform()
(5)执行:perform()
虽然selenime框架中提供了右击鼠标方法,但是没有提供右击菜单的方法,可以通过发送快捷键的方式解决(经测试谷歌浏览器不支持)
4.键盘操作
键盘对应的方法都在keys中
(1)CONTROL:ctrl键
(2)BACKSPACE:删除键
(3)ctrl+c:keys.CONTROL,'c'
driver.find_element(By.CSS_SELECTOR,'#passwordA').send_keys(Keys.CONTROL,'v')
5.元素等待
元素等待分类
    隐式等待
        driver.implicittly_wait() #一般设置30秒
        针对所有元素生效,一般为前置必写代码
    显示等待
        WebDriverWait(driver, timeout=10, poll_frequency=0.5).until(lambda x: x.find_element(By.ID, '#user')).send_keys('admin')
        timeout:超时时间
        poll_frequery:访问频率,默认0.5秒找一次元素

总结

愿大家在往后的项目实战中,能灵活运用这些知识,让自动化测试成为提升软件质量、加速交付周期的得力助手。

你可能感兴趣的:(前端,自动化,功能测试)