自动化测试Selenium、Webdriver

目录

UI自动化测试

Webdriver(浏览器驱动)API

Python中基本用法

⭐定位元素

⭐操作测试对象

⭐添加等待

⭐打印信息

⭐浏览器操作

⭐键盘事件

⭐鼠标事件

本地html自测

常见问题解决方案

① 定位一组元素

② 层级定位、下拉框的选择、div框的处理方法

③ alert框的处理


自动化测试:测试机按照预先设定好的条件运行,设定的条件包括(正常/异常条件),不需要人为手工干涉去进行测试。【通过脚本去设定】

自动化测试金字塔:UI测试、接口测试、单元测试

  • 单元测试【Java、Junit框架】对程序组成的最小单元进行测试,效率最高
  • 接口测试【robotframework框架,jmeter,postman,Django,soupUI】测试用例维护量少,适合接口变动小的项目
  • UI测试【selenium,junitest框架】根据界面操作元素,模拟用户的使用,编写自动化脚本进行测试

自动化测试工具:jmeter、testNG、Django、Appium、Macaca

UI自动化测试

通过操作前端页面的元素调用后台接口,看实际值和预期值是否一致。

特点:用例维护量大;项目后期(前后端开发完成)进行;适合界面比较稳定的项目

优点:

  • 可复用,解放双手提高效率,节省资源
  • 进行大量反复的回归测试兼容性测试
  • 可以进行手工测试无法完成的测试(如:精准计时)
  • 建立一个稳定可靠的测试过程,减少人为错误
  • 进行繁琐的测试(数据驱动ddt)

Webdriver(浏览器驱动)API

Anaconda环境下安装配置ChromeDriver的方法:Anaconda环境下 安装配置ChromeDriver、GeckoDriver - 简书 (jianshu.com)

工作原理:

  1. selnium-webdriver启动浏览器,把浏览器绑定到特定端口,浏览器成为一个 remote server
  2. 客户端(脚本)通过 commandExecutor ,用HTTP协议向 remote server 发送请求
  3. 把 web service 指令解析成浏览器的 native 指令,操纵浏览器

Python中基本用法

# coding = utf -8
# 设置编码模式,防止乱码

# 导入需要的工具包
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 获得浏览器的驱动
driver = webdriver.Chrome()
# 打开需要访问的web页面
driver.get("https://www.baidu.com/")
# 最大化窗口
driver.maximize_window()
# 定位页面的元素,对元素进行操作(用id定位)
driver.find_element(By.ID,'kw').send_keys("我在他乡挺好的")
driver.find_element(By.ID,"su").click()

# 等待 3s
time.sleep(3)
# 退出浏览器,并清理缓存垃圾
driver.quit()

⭐定位元素

  • id
  • name
  • classname
  • xpath
  • link text 适用于可点击的链接
  • partial link text 用部分链接的内容去定位元素
  • tag name 唯一时可以定位到
  • css selector

⭐操作测试对象

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 清除对象输入的文本内容
  • submit 提交
  • text 获取元素的文本信息

⭐添加等待

  • time.sleep()  固定等待
  • drive.implicitly.wait()  智能等待

⭐打印信息

  • driver.title
  • driver.current_url

⭐浏览器操作

  • driver.maximize_window()  最大化窗口
  • driver.set_window_size(宽, 高)  设置浏览器的宽和高
  • driver.back()  浏览器后退
  • driver.forward()  浏览器前进
  • driver.execute_script("var q=document.documentElement.scrollTop=离页首距离")  滑滚动条

⭐键盘事件

导包:from selenium.webdriver.common.keys import Keys

通过send_keys()调用按键:

  • send_keys(Keys.TAB)        #TAB键
  • send_keys(Keys.ENTER)   #回车
  • send_keys(Keys.SPACE)   #空格
  • send_keys(Keys.ESCAPE) #ESC键
  • send_keys(Keys.CONTROL, 'a') #Ctrl+A

⭐鼠标事件

导包:from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).move_to_element(元素).perform()

  • perform()  xuan'z
  • context_click()  右击
  • double_click()  双击
  • drag_and_drop()  拖动
  • move_to_element() 移动

本地html自测

import os
# 拼接 URL
url = "file:///" + os.path.abspath("文件的绝对路径")
driver.get(url)

常见问题解决方案

① 定位一组元素

#coding=utf-8
from selenium import webdriver
import time
import os

dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('xxxxxx.html')
dr.get(file_path)
# 选择页面上所有的input,然后从中过滤出所有的checkbox 并勾选之
inputs = dr.find_elements_by_tag_name('input')
for input in inputs:
    if input.get_attribute('type') == 'checkbox':
        input.click()

time.sleep(2)
dr.quit()

② 层级定位、下拉框的选择、div框的处理方法

  • xpath
  • 通过tag_name定位一组元素,遍历找到对应的值点击
  • 通过tag_name定位一组元素,找到数组位置

③ alert框的处理

# 获得弹框的操作句柄
alert = driver.switch_to.alert
time.sleep(3)    # 确保弹框出现
# 接收弹框(调用accept方法关闭弹框)
alert.accept()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值