Web自动化测试(一)

一、自动化测试

1、优点

在最短时间内运行最多的bug
脚本重复运行
减少人为错误
克服手工测试局限性(图片大小)

2、概念
让程序代替人工去验证系统功能的过程
3、解决问题

解决回归测试
解决压力测试
解决兼容性测试
提高测试效率,保证产品质量

  • 误区:
  • 自动化测试可以完全替代手工测试
  • 自动化测试一定比手工测试厉害
  • 自动化测试可以发掘更多BUG
  • 自动化测试适用于所有功能

4、自动化测试分类

web-自动化测试
移动-自动化测试
接口-自动化测试
单元测试-自动化测试

二、Web自动化测试

概念:让程序代替人工自动验证web项目功能的过程

什么Web项目适合做自动化测试?
1、需求变动不频繁
2、项目周期长
3、项目需要回归测试

Web自动化测试在什么阶段开始?
功能测试完毕(手工测试)

Web自动化测试所属分类
1、黑盒测试(功能测试)
2、白盒测试(单元测试)
3、灰盒测试(接口测试)
Web自动化测试属于黑盒测试。

三、Selenium工具

Selenium是一个用于Web应用程序的自动化测试工具

特点:
开源软件、跨平台、支持多种浏览器、支持多种语言、成熟稳定、功能强大

四、元素定位

为什么要使用元素定位?
要使用web自动化操作元素,必须首先找到此元素
定位工具:F12键(开发者工具)
定位元素依赖于什么?
1、标签名
2、属性
3、层级
4、路径

4.1 元素定位方式

1、id
2、name
3、class_name(使用元素的class属性定位)
4、tag_name(标签名称<标签名 …/>)
5、link_text(定位超链接 a标签)
6、partial_link_text(定位超链接 a标签 模糊)
7、xpath(基于元素路径)
8、css(元素选择器)

4.2 id定位

id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档是唯一的

方法:
element = driver.find_element_by_id(id)

# 导包
from time import sleep

from selenium import webdriver
# 获取浏览器对象
driver = webdriver.chrome()
# 打开url
url = ""
driver.get(url)
# 查找用户名元素
username = driver.find_element_by_id("userA")
# 查找密码元素
password = driver.find_element_by_id("passwordA")
# 用户名输入
username.send_keys("admin")
# 密码输入
password.send_keys("123456")
# 暂停3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

4.3 name定位

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

url = ""

driver.get(url)

driver.find_element_by_name("userA").send_keys("admin")

driver.find_element_by_name("passwordA").send_keys("123456")

sleep(3)

driver.quit()

4.4 class_name定位

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

url = ""

driver.get(url)

driver.find_element_by_class_name("telA").send_keys("15811111111")

driver.find_element_by_class_name("emailA").send_keys("123@qq.com")

sleep(3)

driver.quit()

id:一般为唯一标识符
name:可以重名
class:多个命名

4.5 tag_name定位

element = driver.find_element_by_tag_name(tag_name)
如果存在多个相同标签,则返回符合条件的第一个标签

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

url = ""

driver.get(url)

driver.find_element_by_tag_name("input").send_keys("admin")

sleep(3)

driver.quit()

4.6 link_text定位

from selenium import webdriver

driver = webdriver.Chrome()

url = ""

driver.get(url)
# 只能使用精准匹配(标签的全部文本内容)
driver.find_element_by_link_text("访问 谷歌 网站").click()

driver.quit()

4.7 partial_link_text定位

from selenium import webdriver

driver = webdriver.Chrome()

url = ""

driver.get(url)
# 使用模糊,唯一代表关键词
# 没有使用唯一代表词,默认操作符合条件的第一个元素
driver.find_element_by_partial_link_text("访问").click()

driver.quit()

4.8 XPath定位

为什么使用XPath和CSS定位?
1、id,name,class:依赖于元素这三个对应的属性,如果元素没有以上三个属性,定位方法不能使用
2、link_text,partial_link_text:只适合超链接
3、tag_name:只能找页面唯一元素,或者页面中多个相同元素中的第一个元素

  • 定位策略:
  • 1、路径-定位
  • 2、利用元素属性-定位
  • 3、属性与逻辑结合-定位
  • 4、层级与属性结合-定位

element = driver.find_element_by_xpath(xpath)

"""
需求:
    1、使用绝对路径定位 用户名 输入admin
    2、暂停2秒钟
    3、使用相对路径定位 密码框 输入123
"""
from selenium import webdriver

from time import sleep

driver = webdriver.Chrome()

url = ""

driver.get(url)

# 使用绝对路径定位用户名
driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin")

# 暂停两秒
sleep(2)

# 使用相对路径定位密码框
driver.find_element_by_xpath("//input[@id='passwordA']").send_keys("123456")

driver.quit()

扩展:
1、//[text()=‘XXX’] 定位文本值等于XXX的元素,一般适合p标签,a标签
2、//
[contains(@属性,‘XXX’)] 定位属性包含XXX的元素
3、//*[starts-with(@属性,‘XXX’)]定位属性以XXX开头的元素

4.8 CSS定位

CSS是一种语言,它用来描述HTML元素的显示样式,在CSS中,选择器是一种模式,用于选择需要添加样式的元素

element = driver.find_element_by_css_selector(css_selector)

定位策略
1、id选择器
前提:元素必须有id属性,语法:#id
2、class选择器
前提:元素必须有class属性,语法:.class
3、元素选择器
语法:element
4、属性选择器
语法:[属性名=属性值]
5、层级选择器
语法:p>input;p input,大于号必须为子元素,空格则不用

"""
需求:
    1、使用id选择器 用户名 输入admin
    2、使用属性选择器 密码框 输入123456
    3、使用class选择器 定位电话号码 12399999999
    4、使用元素选择器 定位span标签获取文本值
    5、使用层级选择器 定位Email输入123@qq.com
"""
from selenium import webdriver

from time import sleep

driver = webdriver.Chrome()
url = ""
driver.get(url)
# 1、使用id选择器 用户名 输入admin
driver.find_element_by_css_selector("#userA").send_keys("admin")
# 2、使用属性选择器 密码框 输入123456
driver.find_element_by_css_selector("[name='passwordA']").send_keys("123456")
# 3、使用class选择器 定位电话号码 12399999999
driver.find_element_by_css_selector(".telA").send_keys("12399999999")
# 4、使用元素选择器 定位span标签获取文本值
span = driver.find_element_by_css_selector("span").text
print("获取的span标签文本值:", span)
# 5、使用层级选择器 定位Email输入123@qq.com
driver.find_element_by_css_selector("p>input[placeholder='电子邮箱A']").send_keys("123@qq.com")

driver.quit()

4.9 扩展-封装

定位一组元素
方法:driver.find_elements_by_xxx()
返回结果:类型为列表,要对列表进行访问和操作必须指定下标或进行遍历,下标从0开始

# 扩展八种元素定位的底层实现
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = ""
driver.get(url)
driver.find_element(By.ID, "userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR, "passwordA").send_keys("123456")
driver.quit()

By类需要导包 from selenium.webdriver.common.by import By

五、元素操作

常用操作方法:
1、click() 单击元素
2、send_keys(value) 模拟输入
3、clear() 清除文本

from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

url = ""

driver.get(url)
# 输入admin
driver.find_element_by_name("userA").send_keys("admin")
# 输入密码123456
driver.find_element_by_name("passwordA").send_keys("123456")
# 输入电话 12399999999
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("12399999999")
# 输入邮箱 123@qq.com
driver.find_element(By.CSS_SELECTOR, "#emailA").send_keys("123@qq.com")
# 暂停3秒
sleep(3)
# 修改号码 11199999999
driver.find_element(By.CSS_SELECTOR, ".telA").clear()
driver.find_element(By.CSS_SELECTOR, ".telA").send_keys("11199999999")
# 暂停3秒
sleep(3)
# 点击注册按钮
driver.find_element(By.CSS_SELECTOR, "button").click()
driver.quit()

六、浏览器常用操作API

在这里插入图片描述

from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

url = "https://www.csdn.net/"

driver.get(url)

# 将浏览器最大化
driver.maximize_window()
# 设置固定大小 300,200
driver.set_window_size(300, 200)
# 移动浏览器窗口位置 x:320,y:150
driver.set_window_position(320, 150)
# 最大化
driver.maximize_window()
# 点击 注意:要演示后退功能,必须先执行打开新的网站
driver.find_element((By.CSS_SELECTOR, "#li:nth-child(1) > a")).click()
sleep(3)
# 执行后退
driver.back()
sleep(3)
# 执行前进 注意:前进必须放在后退之后
driver.forward()
sleep(3)

driver.quit()
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = " "
driver.get(url)

# 将浏览器最大化
driver.maximize_window()
# 用户名输入 目的:刷新完成--清空
driver.find_element(By.CSS_SELECTOR, "#user").send_keys("admin")
# 刷新
driver.refresh()
# 获取title
title = driver.title
# 获取当前url
current_url = driver.current_url
# 点击 注册A网页 打开新窗口
driver.find_element(By.PARTIAL_LINK_TEXT, "注册A网页").click()
# 关闭主窗口
driver.close()

七、获取元素信息

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = " "
driver.get(url)

# 将浏览器最大化
driver.maximize_window()
# 获取用户名文本框大小
size = driver.find_element(By.CSS_SELECTOR, "#user").size
print("用户名大小为:", size)
# 获取页面上第一个超文本链接内容
text = driver.find_element(By.CSS_SELECTOR, "a").text
print("页面中第一个a标签为:", text)
# 获取页面上第一个超文本链接地址
attr = driver.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
print("页面中第一个a标签为href属性值为:", attr)
# 判断span元素是否可见
display = driver.find_element(By.CSS_SELECTOR, "span").is_displayed()
print("span元素是否可见", display)
# 判断取消按钮是否可用
enabled = driver.find_element(By.CSS_SELECTOR, "cancel").is_enabled()
print("取消按钮是否可用", enabled)
# 判断旅游是否被选中
selected = driver.find_element(By.CSS_SELECTOR, "#ly").is_selected()
print("旅游是否被选中", selected)
driver.quit()

八、鼠标及键盘操作

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = " "
driver.get(url)
# 实例化并获取ActionChains类
action = ActionChains(driver)
# 定位用户名 在用户名上右击鼠标 预期:粘贴
action.context_click(driver.find_element(By.CSS_SELECTOR, "#userA")).perform()
# 发送用户名admin并进行双击 预期:选中admin
action.double_click(driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")).perform()
# 移动到注册按钮上 预期:按钮变色 出现加入会员A
action.move_to_element(driver.find_element(By.CSS_SELECTOR, "button")).perform()

driver.quit()
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = " "
driver.get(url)
# 实例化并获取ActionChains类
action = ActionChains(driver)
source = driver.find_element(By.CSS_SELECTOR, "#div1")
target = driver.find_element(By.CSS_SELECTOR, "#div2")
action.drag_and_drop(source, target).perform()
# 扩展:偏移
action.drag_and_drop_by_offset(source, xoffset=360, yoffset=180).perform()
driver.quit()

在这里插入图片描述

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = " "
driver.get(url)
username = driver.find_element(By.CSS_SELECTOR, "#userA")
username.send_keys("admin1")
# 删除
username.send_keys(Keys.BACK_SPACE)
# 全选
username.send_keys(Keys.CONTROL, "a")
# 复制
username.send_keys(Keys.CONTROL, "c")
# 粘贴
driver.find_element(By.CSS_SELECTOR, "#passwordA").send_keys(Keys.CONTROL, "v")
driver.quit()

九、元素等待

元素等待:在定位页面元素时如果未找到,会在指定时间内一直等待的过程

元素等待类型:
1、隐式等待:driver.implicitly_wait(timeout),timeout单位秒
2、显式等待:显式等待的相关方法封装在WebDriverWait类中
说明:
隐式等待为全局设置,设置一次,就会作用于所有元素
显示等待针对单个元素生效

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 设置元素等待 隐式等待10秒
driver.implicitly_wait(5)
url = ""
driver.get(url)
driver.find_element(By.CSS_SELECTOR, "#user").send_keys("admin")
sleep(2)
driver.quit()
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
# 设置元素显式等待
url = ""
driver.get(url)
# 实例化WebDriverWait()并调用until方法
# 调用until放啊返回的一定是一个元素
username = WebDriverWait(driver, timeout=30, poll_frequency=0.5).until(lambda x:x.find_element_by_id("#user"))
# 注意:此时username还不是元素,只有代码运行起来才是元素
username.send_keys("admin")
sleep(2)
driver.quit()
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
# send_keys上传文件
driver = webdriver.Chrome()
driver.implicitly_wait(5)
url = ""
driver.get(url)
driver.find_element(By.CSS_SELECTOR, "[name='upfilea']").send_keys("D:\hello.txt")
sleep(2)
driver.quit()
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我今天主要概括一下对于Web自动化测试而言,现在最火的一个工具----Selenium的学习思路。   1.首先,对于想学自动化测试的朋友,那么你得懂一种语言,常用的比如Java或者Python。因为没有语言基础,你是写不出自动化脚本的。   2.有了开发语言的铺垫,那么开始入手Selenium。了解它的发展,了解它的组成,了解它的实现原理。   3.当你对Selenium有了整体的了解后,可以开始学习了。实际上,我现在说的Selenium就是Selenium2。   4.(第一层次)首先你得知道:什么是元素?怎么去定位一个页面元素?怎么去控制元素?怎么控制浏览器?.....学完这些,那么恭喜你,你可以写简单页面的自动化功能测试了。   5.(第二层次)熟练的编写页面自动化脚本:碰到复杂的页面,比如嵌套很多,知道怎么去跳转。复杂元素,怎么去定位,各种页面元素的处理,比如表格、下拉框、弹出框等等。   6.(第三层次)熟练掌握上面技巧之后,开始学习怎么将页面元素与代码分离,学习数据驱动(TestNG),以及怎么样结合Excel去做自动化测试。   7.(第四层次)学习持续集成的方法,怎么样将自动化测试更加“自动化”。同时,开始学习自动化测试框架,能够根据产品的实际情况来编写合适的测试框架。   以上,我认为大体就是学习web自动化测试的一个思路。都是个人观点,而且由于时间原因,写的不是很详细,还请大家见谅。
Web自动化测试是一种通过编写脚本或使用自动化测试工具来模拟用户在Web应用程序中的操作,并验证应用程序的功能和性能的方法。要学习Web自动化测试,可以按照以下步骤进行: 1. 掌握基本的编程知识:Web自动化测试通常使用编程语言来编写测试脚本,所以需要学习一种编程语言,比如Python、Java或JavaScript。掌握基本的编程概念和语法是学习Web自动化测试的基础。 2. 学习HTML和CSS:了解HTML和CSS的基本知识对于理解Web页面的结构和样式很重要。这对于定位和操作页面元素非常有帮助。 3. 学习Web开发技术:了解基本的Web开发技术,比如HTTP协议、浏览器工作原理、前端框架等,可以帮助你更好地理解Web应用程序的工作原理,从而更好地进行自动化测试。 4. 选择自动化测试工具:有许多流行的自动化测试工具可供选择,比如Selenium、Cypress、Puppeteer等。选择一个适合你的项目需求和编程语言的工具,并深入学习它的使用。 5. 实践项目:通过实践项目来巩固学到的知识。选择一个简单的Web应用程序,并编写自动化测试脚本来模拟用户的操作并验证应用程序的功能和性能。 6. 持续学习和提升:Web自动化测试是一个不断发展的领域,新的工具和技术不断涌现。保持学习的态度,关注最新的发展,参与社区讨论和交流,不断提升自己的技能。 希望这些步骤能帮助你开始学习Web自动化测试!如果你有任何更具体的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值