当前位置:网站首页>自动化测试及Selenium
自动化测试及Selenium
2022-08-10 10:06:00 【Java小菜鸟~】
自动化测试及Selenium
一、自动化测试
自动化测试:将人为驱动的测试行为转化为机器执行的过程;
自动化测试的优点:
(1)可以进行回归测试;
(2)节约资源;
(3)可靠性高且可以完成重复性测试;
(4)能够完成手工测试无法完成的测试(精准计时)
二、Selenium
1. Selenium 介绍及安装
Selenium是一款用于web应用测试的工具,由Selenium IDE,Webdriver与Selenium Grid组成;
(1)Selenium IDE:录制自动化脚本的工具;
(2)webDriver:驱动浏览器对Web元素进行操作;
(3)Selenium Grid:是一个服务器,提供对浏览器实例访问的服务器列表,管理各个节点的注册和状态信息;
安装命令:pip install selenium ==3.12.0(指定版本)
2. Selenium 优势
- 免费、小巧易安装;
- 支持多语言:
Java、Python、C#、javaScript; - 支持多平台:
windows、Linux、Mac; - 支持多浏览器:
chrome、Firefox、edge、safari; - 支持分布式测试;
3. 安装驱动
谷歌浏览器驱动:驱动链接
点开链接,选择与自己浏览器所对应的版本即可,由于采用Python来实现脚本开发,因此,解压后将chromedriver.exe 文件,放在安装Python的目录下;


完成之后就可以进行下面操作啦~
三、webDriver API
1. 定位元素
<1> id 定位
id是页面元素的属性,也是最常用的元素定位方式;
主要通过查看页面元素的id来进行定位(唯一);
如:经常访问的百度页面,通过查看可以知道其输入框的 id,如下图所示:
同样的方法就可以定位到其他页面元素的 id;
方法:
find_element_by_id("kw") :定位到百度输入框;
<2> name 定位
如果页面元素有
name,并且元素的name命名在整个页面是唯一的,那么我们可以用name来定位这个元素;
同样的,可以通过上面方法找到name属性的值;
方法:
find_element_by_name("wd") :定位到百度输入框
<3> class name 定位
定位之前需要保证唯一性!

方法:
find_element_by_class_name("s_ipt") :定位到百度输入框;
<4> tag name 定位
tag name: 标签名
方法:
find_element_by_tag_name("input") :定位到百度输入框;
<5> link text 定位
link text:可以通过链接内容,也就是link text来对文字链接进行定位;
需要注意的是:链接内容必须这个页面唯一,否则会报错;
方法:
find_element_by_link_text("hao123")

<6> partial link text 定位
只用链接的一部分文字进行匹配;
方法:
find_element_by_partial_link_text("hao")
<7> xpath 定位
该定位方式全局唯一,查找方法:
找到要定位的页面元素,右击—>检查---->copy----> copy xpath
<8> css selector 定位
- 方法1:
find_element_by_css_selector("#kw")
- 方法2:
页面元素-----右键----copy----copy selector 来获取
2. 操作测试对象
定位好之后需要对这个元素进行操作,具体什么操作,取决于需求,常见的有以下几种:
- 鼠标点击:
click; - 键盘输入:
send_keys; - 清除元素的内容:
clear; - 提交表单:
submit; - 获取文本信息:
text;
case1:打开百度,搜索电视剧《天才基本法》
代码:
# 打开百度,搜索电视剧天才基本法
# 导入需要的工具包
from selenium import webdriver
import time
# 获取浏览器驱动
driver = webdriver.Chrome()
time.sleep(3)
# 获取百度页面
driver.get("http://www.baidu.com")
time.sleep(3)
# 定位百度输入框,采用id定位的方式来定位元素,之后输入天才基本法
driver.find_element_by_id("kw").send_keys("天才基本法")
time.sleep(3)
driver.find_element_by_id("su").click()
time.sleep(3)
# 关闭浏览器
driver.quit()
case2:获取百度页面最下面的文字

代码:
# 导入需要的工具包
from selenium import webdriver
import time
# 获取浏览器驱动
driver = webdriver.Chrome()
time.sleep(3)
# 获取百度页面
driver.get("http://www.baidu.com")
time.sleep(3)
data = driver.find_element_by_id("bottom_layer").text
print(data)
time.sleep(3)
# 关闭浏览器
driver.quit()
结果如下:
3. 添加等待
- 固定等待:
sleep() - 智能等待:
implicitly_wait()
4. 打印信息
- 打印
URL
# 导入需要的工具包
from selenium import webdriver
import time
# 获取浏览器驱动
driver = webdriver.Chrome()
time.sleep(3)
# 获取百度页面
driver.get("http://www.baidu.com")
time.sleep(3)
print(driver.current_url)
打印结果:

- 打印
title
# 导入需要的工具包
from selenium import webdriver
import time
# 获取浏览器驱动
driver = webdriver.Chrome()
time.sleep(3)
# 获取百度页面
driver.get("http://www.baidu.com")
time.sleep(3)
print(driver.title)
打印结果:

5. 操作浏览器
- 浏览器最大化:
maximize_window()
# 导入需要的工具包
from selenium import webdriver
import time
# 获取浏览器驱动
driver = webdriver.Chrome()
time.sleep(3)
# 获取百度页面
driver.get("http://www.baidu.com")
time.sleep(3)
driver.maximize_window()
time.sleep(2)
driver.quit()
- 设置浏览器宽和高:
set_window_size(480,800)
# 导入需要的工具包
from selenium import webdriver
import time
# 获取浏览器驱动
driver = webdriver.Chrome()
time.sleep(3)
# 获取百度页面
driver.get("http://www.baidu.com")
time.sleep(3)
driver.set_window_size(480,800)
time.sleep(2)
driver.quit()
- 设置浏览器前进与后退:
forward(),back()
from selenium import webdriver
import time
# 访问百度首页
driver = webdriver.Chrome()
first_url = 'http://www.baidu.com'
driver.get(first_url)
time.sleep(2)
# 访问新闻页面
second_url='http://news.baidu.com'
driver.get(second_url)
time.sleep(2)
# 返回(后退)到百度首页
print("back to %s "%(first_url))
driver.back()
time.sleep(1)
# 前进到新闻页
print("forward to %s"%(second_url))
driver.forward()
time.sleep(2)
driver.quit()

6. 键盘事件
注意:要使用键盘按键,必须引入keys 包
导包格式:from selenium.webdriver.common.keys import Keys
通过send_keys()调用按键(单个形式):
- Tab 键 :
send_keys(Keys.TAB); - 回车键:
send_keys(Keys.Enter); - 空格键:
send_keys(Keys.Space); Esc回退键:send_keys(Keys.ESCAPE);
通过send_keys()调用按键(组合形式):
- 全选:
send_keys(Keys.CONTROL,'a') - 复制:
send_keys(Keys.CONTROL,'c') - 粘贴:
send_keys(Keys.CONTROL,'v') - 剪贴:
send_keys(Keys.CONTROL,'x')
case:打开百度,将浏览器最大化,之后输入“刷牙步骤”,完成后,全选并剪切,重新搜素“webdriver”
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()
time.sleep(3)
# 输入框输入内容
driver.find_element_by_id("kw").send_keys("刷牙步骤")
time.sleep(3)
# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(3)
# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
time.sleep(3)
# 输入框重新输入内容,搜索
driver.find_element_by_id("kw").send_keys("webdriver")
time.sleep(3)
7. 鼠标事件
注意:要使用鼠标事件,必须进行导包;
导包格式:from selenium.webdriver.common.action_chains import ActionChains
- 右击:
context_click()(前提先定位元素) - 双击:
double_click()(前提先定位元素) - 拖动:
drag_and_drop() - 移动:
move_to_element()
case:打开百度浏览器,最大化,然后搜索张三,再进行右击和双击操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
# 获取新闻页面
driver.get("http://www.baidu.com")
driver.maximize_window()
driver.find_element_by_id("kw").send_keys("张三")
time.sleep(3)
driver.find_element_by_id("su").click()
b = driver.find_element_by_id("su")
# 右击
ActionChains(driver).context_click(b).perform()
time.sleep(3)
# 双击
ActionChains(driver).double_click(b).perform()
time.sleep(3)
driver.quit()
小结
selenium安装 及自动化测试的优势
webDriver API:
- 定位元素方式:
id,name,tag name,xpath, link text,partial link text ,class name,css selectot - 常用方法:
clear():清除文本send_keys(value):键盘输入click():单击元素submit():提交表单text:获取元素的文本quit():退出浏览器操作
- 操作浏览器:
driver.set_window_size(value,value):设置浏览器的大小,单位是像素;driver.maximize_window():浏览器最大化;driver.back():控制浏览器后退 ;driver.forward():控制浏览器前进;
- 获取信息:
driver.title:获取网页标题driver.current_url:获取网页url
- 鼠标事件:
context_click():右击double_click():双击drag_and_drop():拖动move_to_element():移动
今天就先分享这么多啦,下一篇定位一组元素以及层级定位,加油,铁子们(别忘了点赞+收藏)~~
边栏推荐
猜你喜欢

【知识论概念】《理由论的进展》鲁汶大学2022最新220页博士论文

Flutter实战-请求封装(五)之Isolate线程改造

CatchAdmin实战教程(四)Table组件之自定义基础页面

「应用架构」六边型架构:三个原则和一个实现示例

「应用架构」TOGAF建模:应用程序迁移图

关于编程本质那些事

Payment x Aggregation x Ledger Separation - The Way to Avoid Risk of "Erqing" on the Return Platform

Message Queuing Overview

LCD DRM驱动框架分析二

The web project accesses static resources inside the reference jar
随机推荐
Matlab符号函数的生成及计算其函数值
腾讯发布四足机器人 Max 二代版本,梅花桩上完成跳跃、空翻
Which is the strongest workflow engine for "Technology Selection"?Chief Architecture Helps You Pick
在兄弟连战狼班参加PHP培训做行业领先人才
数据库中的schema
【物联网架构】最适合物联网的开源数据库
因子分析(SPSS)
数据库的约束
CSDN 21 Days Learning Challenge - Polymorphism (05)
「应用架构」TOGAF建模:应用程序迁移图
Thrift -- 跨语言RPC 框架
裸辞→自我放松→闭关→复习→斩获Offer
【数据架构】概念数据模型和逻辑数据模型有什么区别
ESP8266 教程2 — 烧录AT固件
ESP8266-Arduino编程实例-MQ-9 一氧化碳可燃气体传感器驱动
Lasso regression (Stata)
VBA: 采用Combox控件实现二级下拉菜单功能
【Prometheus】Node Exporter常用查询PromQL 语句大总结
武功修炼:内功
单例模式基类