测试技能之Selenium

1. 测试核心理论知识

1.1 软件开发生命周期

简介:讲解软件开发的生命周期
1、测试人员需要全程参与

需求调研-》需求分析评审-》软件架构设计-》编码-》单元测试-》集成测试-》系统测试-》预发布系统测试-》上线

  • 测试人员要求开发人员写单元测试
  • 把控时间点、风险点
  • 接口文档不完善(更新了需求功能,不及时更新接口文档)

1.2 测试相关知识分类讲解

简介: 测试分类讲解

  • 黑盒测试(功能测试):功能符合用户的需求:

  • 白盒测试:知道里面的逻辑,验证符合用户的需求

  • 冒烟测试:主功能、主路径测试

  • 自动化测试: 人工测试转为工具自动执行(没有谁取代谁,有些场景适合自动化测试,有些场景适合手工测试)

  • 性能测试:模拟多种峰值和负载去测试各项性能指标 jmeter、loadrunner

1.3 自动化测试和手工测试优缺点

简介:介绍什么时候需要用到自动化测试和什么时候用手工测试

  • 1、自动化测试方便,自动验证功能是否有问题
  • 2、更好的利用自有,节约人力成本
  • 3、覆盖更全,增加软件的稳定性
    场景:
    软件需求变更少,项目周期长,稳定性要强,环境要隔离独立(开发一套环境、测试一套环境)
    如果整个系统需求变更多,只能抽取部分功能做自动化测试,手工测试和自动化测试相辅相成,不是取代关系。
    语言选择:
    python java ,打造自己的唯一性

2. selenium实战之模拟事件处理

2.1 selenium之ActionChains模拟用户行为

简介:讲解使用selenium里面的ActionChains模拟用户的行为

  • 需求:
    需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽

  • 解决:selenium提供了一个类来处理这类事件
    selenium.webdriver.common.action_chains.ActionChains(driver)

  • 脚本:
    from selenium.webdriver.common.action_chains import ActionChains

  • 执行原理:
    调用ActionChains的方法时不会立即执行,会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,队列中的事件会依次执行
    支持链式写法或者分步写法
    ActionChains(driver).click(ele).perform()

  • 鼠标和键盘方法列表:

perform() 执行链中的所有动作

click(on_element=None) 单击鼠标左键

context_click(on_element=None) 点击鼠标右键

double_click(on_element=None) 双击鼠标左键

move_to_element(to_element) 鼠标移动到某个元素
		
ele.send_keys(keys_to_send) 发送某个词到当前焦点的元素


========== 不常用 ==========

click_and_hold(on_element=None) 点击鼠标左键,不松开

release(on_element=None) 在某个元素位置松开鼠标左键

key_down(value, element=None) 按下某个键盘上的键

key_up(value, element=None) 松开某个键

drag_and_drop(source, target) 拖拽到某个元素然后松开

drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽到某个坐标然后松开

move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标

move_to_element_with_offset(to_element, xoffset, yoffset) 移动到距某个元素(左上角坐标)多少距离的位置

send_keys_to_element(element, keys_to_send) 发送某个键到指定元素

2.2 鼠标事件实战之hover菜单栏弹出

简介:鼠标事件之菜单栏hover弹出

  • 1、引入 ActionChains 类
    from selenium.webdriver.common.action_chains import ActionChains

  • 2、move_to_element(to_element) 鼠标移动到某个元素
    #对定位到的元素执行鼠标移动到上面的操作
    ActionChains(driver).move_to_element(ele1).perform()

  • 3、多知识点综合实战之模拟用户登录
    简介:讲解使用selenium模拟登录小D课堂,并选择课程
    1、多知识点实战
    2、查找登录框-》输入用户名和密码-》触发登录-》判断登录是否成功-》打印结果

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()       #拿到driver
driver.get("https://xdclass.net") #跳转指定网页
#定位鼠标移动到上边的元素
menu_ele = driver.find_element_by_css_selector("#app > div > div.main > div.banner.w > div.l_course_list > ul > li:nth-child(1)")
ActionChains(driver).move_to_element(menu_ele).perform()

在这里插入图片描述

#选中子菜单
sub_menu_ele = driver.find_element_by_css_selector("#app > div > div.main > div.banner.w > div.innerbox > div.base > div.sort > a:nth-child(1)")
sleep(2)
sub_menu_ele.click()  #点击子菜单

点击后跳转界面
在这里插入图片描述
4、自动化测试实战之网页等待时间
简介:讲解自动化测试的等待时间

  • 1、为什么需要等待时间–》等系统稳定
    网页需要加载对应的资源文件,页面渲染,窗口处理等等

  • 2、自动化测试常用的等待时间
    强制等待 : (自己调试代码看效果)
    from time import sleep
    sleep(5) # 强制等待5秒再执行下一步,缺点是不管资源是不是完成,都必须等待

    隐性等待:
    driver.implicitly_wait(10) # 隐性等待,最长等10秒
    #设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步,弊端就是程序会一直等待整个页面加载完成,到浏览器标签栏那个加载圈不再转

    注意:对driver起作用,所以只要设置一次即可,没有必要到处设置

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()        #拿到 driver
driver.get("https://xdclass.net")  
driver.implicitly_wait(10) #隐式等待,最长等待时间10s.

login_ele = driver.find_element_by_css_selector("#app > div > div.header > div > div.r_userinfo.f_r > div.login > span:nth-child(2)")
ActionChains(driver).click(login_ele).perform()   #触发点击事件,显示登录框
driver.find_element_by_css_selector("#app > div > div.header > div.main > div.login > div > div.mobienum > input[type=text]").clear()
driver.find_element_by_css_selector("#app > div > div.header > div.main > div.login > div > div.mobienum > input[type=text]").send_keys("13180977920")
driver.find_element_by_css_selector("#app > div > div.header > div.main > div.login > div > div.psw > input[type=password]").clear()
driver.find_element_by_css_selector("#app > div > div.header > div.main > div.login > div > div.psw > input[type=password]").send_keys("dacidabei")
login_btn_ele = driver.find_element_by_css_selector("#app > div > div.header > div.main > div.login > div > div.login_btn > button")
login_btn_ele.click()  #点击登录

#移动鼠标到弹窗
user_info_ele = driver.find_element_by_css_selector("#app > div > div.header > div > div.r_userinfo.f_r > div.avatar.f_r > img")
ActionChains(driver).move_to_element(user_info_ele).perform()

#获取用户名元素
user_name_ele = driver.find_element_by_css_selector("#app > div > div.header > div > div.userbox.f_r > div > div.user > p")
print("=========测试结果=============")
print(user_name_ele.text)
name = user_name_ele.text
if name == u'沧海一阳':
    print("login ok!")
else:
    print("login fail!")

  • 显性等待:
    WebDriverWait 需要配合 until和until_not,程序每隔N秒检查一次,如果成功,则执行下一步,否则继续等待,直到超过设置的最长时间
    from selenium.webdriver.support.wait import WebDriverWait
    语法WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#拿到diver
driver =  webdriver.Chrome()
#driver.implicitly_wait(10)  # 隐性等待,最长等10秒
#跳转网页
driver.get("https://baidu.com")
try:
	#显性等待
	ele = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID,"kw")))  #最大超时时间为5s,每隔0.5s刷新一次,直到找到网页上的element。
	ele.send_keys("小D课堂")
	print("资源加载成功")
	print(driver.title)
except:
	print("资源加载失败,发送报警邮件或者短信")

finally:
	print("不管有没成功,都打印,用于资源清理")
	#退出浏览器
	driver.quit()

结论: 隐性等待和显性等待可以同时用,等待的最长时间取两者之中的较大者*

3. selenium干弹窗、取cookie与error截图

3.1 干弹窗

自动化测试之页面常见弹窗处理
简介:讲解使用selenium处理页面弹窗,alert和comfirm

  • 弹窗常用方法(需要先切换窗口 switch_to_alert() )
    • accept() 表示接受
    • dismiss() 表示取消

alert.html

<!DOCTYPE html>
<html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<input id = "alert" value = "alert" type = "button" onclick = "alert('alert 关注小D课堂');"/>

<input id = "confirm" value = "confirm" type = "button" onclick = "confirm('confirm 关注小D课堂');"/>  

</body>

</html>

操作弹窗:

# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

#拿到diver
driver = webdriver.Firefox()

#跳转网页
driver.get("file:/Mac/Home/Desktop/alert.html")

print(driver.title)

#睡眠时间3秒
sleep(2)

driver.find_element_by_id("alert").click()
#切换到弹窗
win = driver.switch_to_alert()
sleep(2)
win.accept()


driver.find_element_by_id("confirm").click()
#切换到弹窗
confirm_ele = driver.switch_to_alert()
sleep(2)
#confirm_ele.accept()
confirm_ele.dismiss()

3.2 取cookie

F12 后 点击Application,添加name和value
在这里插入图片描述

# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

#拿到diver
driver = webdriver.Chrome()

#跳转网页
driver.get("https://xdclass.net")

print(driver.title)

#睡眠时间3秒
sleep(3)

driver.add_cookie({"name":"name","value":"jack"})
driver.add_cookie({"name":"token","value":"xdclasseyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ4ZGNsYXNzIiwicm9sZXMiOiIxIiwiaW1nIjoiaHR0cHM6Ly94ZC12aWRlby1wYy1pbWcub3NzLWNuLWJlaWppbmcuYWxpeXVuY3MuY29tL3hkY2xhc3NfcHJvL2RlZmF1bHQvaGVhZF9pbWcvNy5qcGVnIiwiaWQiOjY3NDkxOSwibmFtZSI6Iuayp-a1t-S4gOmYsyIsImlhdCI6MTU5NTc3MjkxNiwiZXhwIjoxNTk2Mzc3NzE2fQ.tAElec9ZkGhn5e3sNBYoJHrUU8Bn68le_Oa13H08GoY"})

video_ele = driver.find_element_by_css_selector("#app > div > div.new > div > div.content > div.l_content > a:nth-child(2) > div > h1")
video_ele.click()
sleep(2)
driver.get("https://xdclass.net/#/payconfirm?video_id=52")

3.3 Error截图

# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

#拿到diver
driver = webdriver.Firefox()

#跳转网页
driver.get("https://xdclass.net")

print(driver.title)
#睡眠时间3秒
sleep(3)


#登录框
login_ele = driver.find_element_by_css_selector("#login")
#触发点击事件
ActionChains(driver).click(login_ele).perform()


#捕捉找不到元素异常 
try:
	driver.find_element_by_id("xdclass").click()
except:
	driver.get_screenshot_as_file("./error_png.png")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值