一、自动化测试
自动化测试 :将人为驱动的测试行为转化为机器执行的过程; 自动化测试的优点: (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 定位
find_element_by_css_selector("#kw")
页面元素-----右键----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)
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. 打印信息
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)
打印结果:
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. 操作浏览器
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)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(3)
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()
小结
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() :移动
今天就先分享这么多啦,下一篇定位一组元素以及层级定位,加油,铁子们(别忘了点赞+收藏)~~
|