amei0 2020-07-08
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机制了。
5.环境变量配置在linux系统下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里面方法一:将文件移动到属于环境变量目录中sudo mv chromedriver /user/bin