28 selenium
selenium
目录
一、seleniumwebdriver环境搭建
二、selenium浏览器常见操作
三、selenium框架原理
四、cookie管理
正文
一、seleniumwebdriver环境搭建
1.什么是selenium?
selenium是浏览器自动化框架,只是对于测试人员来说,是用来做web自动化测试(基本就是测UI)。
误区:不是单纯的自动化测试框架
1.1 知识对比:
web自动化测试VS接口自动化
--web自动化测试成本高,为什么还要做?
来看看测试金字塔,底层的单元测试unittest一般是开发自己自测,但是国内基本没有开发自测unittest,所以集成测试(接口测试)就比较看重。
接口测试是web自动化测试很重要的。
web自动化测试有具体的测试场景:重复性很高的工作,做web自动化测试比较合适。
比如场景有:冒烟测试,测试主流程的时候;回归测试;正向用例
(接口自动化注重的是测试的覆盖率)
1.2.面试题:做自动化测试是因为时间紧急?---------X
做自动化,编写自动化测试脚本是很费时间的,如果时间紧急,就直接人工测试,更不能实现自动化。
什么时候实现自动化?项目稳定、空闲的时候----(项目没有完成,UI没有实现,元素无法定位等,所以必须要项目稳定才能做web自动化)
接口自动化什么时候实现?接口还没有实现的时候就可以写测试脚本,做自动化,用mock去做。
2.selenium的安装
2.1 安装:pip install selenium
再命令行安装失败,可以在下面的路径里安装
注意,不要勾选上图黑框里的选项,涉及到权限问题。
安装成功,如下,多了了两个库:selenium,urllib3,点击确定即可。
2.2虚拟环境
1)如果已经安装了库,但是运行的时候总是报:找不到的错误,说明你可能是在虚拟环境中运行的。
2)如何判断你是在虚拟环境中?-----命令行查看路径前是不是又括号,如下图所示
3)如何设置虚拟环境?---暂时不需要在虚拟环境中运行!!!
4)虚拟环境的作用
多个项目的时候,将项目分开.每个项目使用的库是不一样的,安装的库太多,不方便管理,可能会影响别的项目。
所以每个项目放在一个虚拟环境中的。
2.3 下载chromedriver驱动(对应谷歌浏览器)
1)下载地址:https://npm.taobao.org/mirrors/chromedriver 我在这里下载的是71.0.3578.80
2)将下载好解压的chromedriver.exe放到环境变量的路径中去,我这里放在python的安装根目录里面
2.4 启动浏览器
1)先导入驱动 :from selenium import webdriver
from selenium import webdriver #启动谷歌浏览器 #先安装好chromedriver.exe安装好 driver = webdriver.Chrome()
或者
from selenium.webdriver import Chrome driver = Chrome()
运行即可打开谷歌浏览器
2)如果chrimedriver.exe驱动没有放到环境变量中去,可以executable_path去配置
#用executable_path去配置驱动chromedriver.exe driver_new = webdriver.Chrome(executable_path=r"D:\chromedriver.exe")
3)常用操作
窗口最大化用的比较多,因为默认窗口不是最大化,打开浏览器一般会先最大化。
代码实现
from selenium import webdriver #启动谷歌浏览器 #先安装好chromedriver.exe安装好 driver = webdriver.Chrome() #打开网址 driver.get("http://www.baidu.com") #窗口最大化 driver.maximize_window() #窗口最小化 driver.maximize_window() #设置窗口大小 driver.set_window_size(800,600) #再次打开一个网址,豆瓣 driver.get("http://douban.com") #后退 driver.back() #前进 driver.forward() #刷新 driver.refresh() #退出 driver.quit()
上面代码运行时,速度快,难以看清楚的话,可以加入休眠时间
导入time库
import time . . . #后退 driver.back() #休眠2s time.sleep(2) #前进 driver.forward() #休眠2s time.sleep(2)
代码如下:
from selenium.webdriver import Chrome driver = Chrome() driver.get("http://www.baidu.com") #网页标题 print(driver.title) #网页URL print(driver.current_url) #窗口句柄--就是窗口的id #打开了多少个标签页(窗口),就有多少个元素存在返回的列表中 print(driver.window_handles) #当前窗口句柄 print(driver.current_window_handle) #当前页面的源代码--前端编写的HTML的文件,HTML是进行web自动化的依据。元素定位 print(driver.page_source)
运行结果
4)元素定位 8大元素定位法
元素:网页页面的一个组件
定位:查找要操作的元素的过程
网页中如何定位原代码?
①网页按F12,调出源代码,以百度首页为例,F12调出源码,点击左边的定位符号,在网页中需要定的地方单击(背景蓝色),下面的源码会自动定位到,如下图源码的灰色背景的地方。
代码实现定位
import time from selenium.webdriver import Chrome driver = Chrome() driver.get("http://www.baidu.com") #按id去定位元素 input_elem = driver.find_element_by_id("kw") time.sleep(2) #输入 input_elem.send_keys("python") time.sleep(2)
结果:先弹出下图一,休眠2s弹出下图二
三、selenium架构
自动化驱动浏览器
webdriver驱动在编程语言跟浏览器之间是桥梁的作用,提供了接口
①selenium发起请求使用什么?---urllib3
上面开始安装selenium的时候,有个依赖urllib3,即使用urllib3发送网络请求。(接口自动化也是依赖了urllib3,只是在urllib3的基础上又封装成request)
②如何证明webdriver提供了接口
直接打开webdriver.exe,弹出如下图:
在浏览器本地访问9515端口
状态码404
访问session,状态码是200,说明webdriver是可以提供接口的
如果把webdriver.exe关闭,那么就无法访问该端口了。可以自行尝试~~~~~~~~~~~~~
四、requests cookie管理
1.session:一个session,就表示开启一次浏览器的过程
2.request发起请求,也类似于“开启一次浏览器”
举例:访问登录、投资,两个接口
分2次会话:第一次登录的会话,是不会把状态(数据)转到第二个投资会话的,因为每开一次会话,都会有初始化过程,会清除所有的缓存数据。
1次会话:登录成功后 直接在成功后的页面 开始进行投资操作,会记录cookie的状态的。
♥request可以用session记录cookie(token不行,token不是浏览器自动处理的,是记不下来的),cookie是自动保存到客户端。
3.request基于cookie机制的
import requests s = requests.session() s.request("get",url="/login")#login成功后获取的cookie会自动保存到s中, s.request("get",url="/invest")#有cookie信息,可直接进行invest
现在主流的是token机制了。