python代码学习——web自动化的基础
web页面的组成
- 常用:HTML+CSS+JavaScript
- HTML:定义页面呈现的内容
- CSS:Cascading Style Sheet :控制页面如何呈现,即局设置;比如字体大小,字体颜色,在页面的呈现的大小等
- JavaScript:若希望网页根据不同的情形做出不同的事情,即可使用此种语言
HTML的定义
- HTML是超文本标记语言,他和python不一样,并不是编程语言,而是一种标记语言。其作用是用来描述网页的内容
- 查看方式:F12——Element查看
- 内容、图片、标签、文本等等都会有
- 一定不能少、固定的三组标签对:
<html>...</html>
、<head>...</head>
和<body>...</body>
,内容必须存在这里面 -
- 网页中所有的内容都呈现在body中
-
- head中只放网页的请求、说明和属性
-
- head中必须要知道的属性是title,即
<title>...</title>
,代表网页的标题,显示在网页最上面的页签
- head中必须要知道的属性是title,即
- pycharm创建html文件,会自带一些标签
HTML的吧标签
- HTML的标签也可以成为元素,其特点有:
-
- HTML标签是由尖括号包围起来的关键词,例如
-
- HTML标签通常是成堆出现的,例如和
-
- 标签对中的第一个标签是开始标签,第二个标签是结束标签
- 以下是常见的HTML标签名
<input>...</input>
中可以存在属性type=“text”
,text
代表文本输入框,radio
,代表单选按钮,单选框添加多个的时候,如果需要判断单选按钮是同一类,要起一样的名称;button
代表按钮,checkbox
代表复选框;file
代表文件上传框- 换行标签为
<br/>
img
代表图片,使用必备属性src=“图片路径”即可添加图片iframe
:iframe本身是当前界面的属性,但是他里面放的元素,不是本界面的元素select
和option
下拉列表,两者成对出现,不会只出现一个,option为select的选项div
,块的意思,里面可以放置某一块的属性,例如:颜色,控件之间的间隔等等boday
中可以存在多个inputa
:是一个链接,可设置style样式。
HTML元素
- HTML文档是由HTML元素定义的
- HTML元素值得是从开始标签到结束标签之间的所有代码,通常和HTML标签表达一个意思
- HTML中的属性是标签的配置信息
- 大多数HTML元素都拥有属性,常见的属性有:
id=“myId”
,代表元素的idname="my_name"
,代表元素的名字,所有属性中只有id是唯一的class
:在不同的div中,选择一部分的模块,做同样的样式,即可在标签对中增加class属性,只要class的名称一致即可- style有一个属性:
display:block
代表元素的显示,即页面能否看得到元素;display:none
代表元素不显示,即页面看不到;visibility:vusible
代表可见 - 页面的元素存在三种状态:元素存在、元素可见、元素可用(例如:按钮置灰不能点))
-
readonly
不可用,disabled
也不可用
- 代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>我的网页</title>
</head>
<body>
<input type="radio" name="movie" checked>女
</br>
头像:
<input type="file">
</br>
住址:
<select>
<option>请选择</option>
<option>北京</option>
<option>天津</option>
<option>河南</option>
<option>河北</option>
</select>
省
<select>
<option>请选择</option>
<option>北京</option>
<option>天津</option>
<option>郑州</option>
<option>石家庄</option>
</select>市
</br>
爱好:
<input type="checkbox" >篮球
<input type="checkbox" >足球
<input type="checkbox" >看书
</br>
备注信息:
<textarea name="reworkmes" cols="40" rows="4" style="OVERFLOW: hidden"></textarea>
</br>
<button>提交</button>
<button>重置</button>
<input type="reset" value="重置">
<image src = "https://img-home.csdnimg.cn/images/20201124032511.png"></image>
</br>
<iframe src="https://www.baidu.com"></iframe>
</br>
<a style="color:red">百度一下,你就知道</a>
</body>
</html>
</body>
</html>
运行结果截图:
selenium
- selenium是用于webnn应用自动化测试工具,开源且免费
- 其支持Chrome、FireFox、Edge、IE、Safari等主流的浏览器
- 支持java,python等编程语言进行自动化脚本的编写
- selenium主要由三大组建组成
-
- selenium IDE,这个是Firefox和Chrome浏览器的扩展插件,通过selenium IDE可以录制和回放浏览器操作,快速实现自动化测试
-
- Selenium Webdriver,这个是selenium的核心,提供了各种语言环境的API支持更多控制权和编写符合标准软件开发实践的应用程序
-
- selenium Grid,分布式测试,通过selenium Grid可以讲自动化的脚本分发到不同的测试机中去执行
selenium IDE
- selenium IDE虽然在Chrome中可以找到,但是因为国内访问不了Chrome的应用商店,因此在Chrome中不能使用,只能在FireFox中使用
- 使用步骤:
-
- 使用firefox打开selenium的官网
-
- 然后点击界面上的selenium IDE的按钮
-
- 后续操作步骤如下图
- 后续操作步骤如下图
-
- 添加成功之后,会出现以下界面
- 添加成功之后,会出现以下界面
-
- 我们可以在一个新的项目中录制新的脚本,设置项目的名称,点击OK
-
- 然后设置项目的base url(项目的访问地址,或者你希望测试的网址)
-
- 然后点击左侧的“开始录制”按钮
-
- selenium会自动打开网址,并在页面右下角会出现一个正在录制的标志(红点点)
-
- 然后就可以操作录制脚本了
-
- 在页面上做任何录制操作,当希望停止录制时,进入IDE插件,点击右上角的停止(圆框红色方框)按钮
-
- 需要给录制过程起一个名字,输入之后,点击OK即可
-
- IDE插件中的command代表操作的指令信息
- 脚本录制完成之后,可以播放自动化测试脚本,需要你点击command上面的播放按钮(向右的小三角,后面没有三个点的)
IDE的缺点
- IDE插件不能进行一些比较复杂的操作或者应用场景,例如需要if判断或者for循环重复执行的场景
- IDE的稳定性不是特别的好,有时候会成功,有时候会失败
- IDE录制的场景很固定,不能实现使用一个脚本套路,执行另外一种场景的情况
UI自动化驱动的基本介绍
- 为了实现web自动化,则需要实现浏览器,驱动以及selenium、webdriver的安装,代码与浏览器之间的关系为:
代码——三大驱动——三大浏览器 - 当前三大浏览器与其对应的三大驱动为:
- chome ——chomedriver
- ie——ieserverdriver
- firefox——geckodriver
webdriverde的安装
win系统,chrome浏览器驱动的安装
- 作用:他可以和代码和浏览器会话,主要链接代码和浏览器,也就是说:代码——中间桥梁(驱动程序)——浏览器
- 了解chrome的版本号,点击谷歌右侧的三个点——帮助——关于Goole Cjhrome来进行查看
- 通过网址 来查找对应的浏览器驱动
- 下载驱动程序后,将驱动程序压缩包解压放在pycharm的安装路径下,如图:
mac电脑安装webdriver
- 首先需要在电脑上配置python3的环境变量,首先需要获取python3和pip3的路径,使用以下命令获得
-
which python3
和which pip3
,界面出现的返回结果如下
- 在终端中使用命令:
open .bash_profile
打开配置文件,输入以下配置信息,其中python3和pip3是刚刚which看到的信息
export PATH="$PATH:/usr/local/bin/python3"
alias python=/Library/Frameworks/Python.framework/Versions/3.10/bin/python3
alias pip =/Library/Frameworks/Python.framework/Versions/3.10/bin/pip3
- 然后执行
source ~/.bash_profile
命令让配置文件生效 - 确认pip3在环境是否可以运行,可以终端直接使用pip安装selenium,命令为:
pip3 install selenium==3.141.0
,可安装成功即可 -
- 使用3.141.0的原因是:他比较稳定
- 使用3.141.0的原因是:他比较稳定
- 还需要禁用电脑上chrome浏览器的自动升级,可以在终端使用命令:
defaults write com.google.Keystone.Agent checkInterval 0
,之后重启浏览器即可,重启后浏览器如下图示 -
- 这里需要注意,执行这个命令之后不仅仅会关闭 Chrome 的自动更新功能,还会关闭装在当前电脑上所有 Google 软件的自动更新功能。所以,一般情况下不建议使用。
- 这里需要注意,执行这个命令之后不仅仅会关闭 Chrome 的自动更新功能,还会关闭装在当前电脑上所有 Google 软件的自动更新功能。所以,一般情况下不建议使用。
- 之后下载chrome相对应的驱动版本
- 下载完成之后,将驱动放在
/usr/local/bin
,可以使用快捷键command+shift+G
快速打开前往文件夹 - 如果遇到问题如下图示,需要在设置——安全性与隐私——通用——允许以下位置的app中点击仍然允许按钮即可
通过pip命令安装selenium
- 打开电脑的cmd命令,进入电脑pip安装路径下,执行pip install -U selenium 命令即可
- 直接在pycharm的setting中进行安装
验证selenium安装成功
- 打开pychram 在py文件夹中引用selenium的webdirver的驱动
- 实例化驱动中的Chrome然后赋值给变量,运行即可
- 代码如下:
from selenium import webdriver #从selenium中引进webdirver
dirver = webdriver.Chrome() #实例化对象,通过变量接收
- 如图,代表selenium安装成功
webdriver和浏览器驱动之间的地址
- 谷歌浏览器地址
- 谷歌浏览器驱动
- 火狐浏览器地址
- 火狐浏览器驱动1 或者 火狐浏览器驱动2
- Edge浏览器地址
- Edge浏览器驱动
- IE浏览器驱动
- IE浏览器的版本直接在官网上下载即可,他的驱动和版本之间可以不对应
- 谷歌浏览器关闭自动更新方法
- 火狐浏览器关闭自动更新方法
- IE浏览器注意事项:
-
- 如果Edge浏览器下载下来的驱动名字一定要记得改为MicrosoftWebDriver.exe,否则会报错
-
- 如果是IE浏览器,对应的版本选择并不是与IE浏览器对照的,而是与Selenium对照的,不要去用64位的IE驱动,官方推荐是使用32位的驱动
- 使用IE浏览器做自动化,需要将浏览器的缩放尺寸设置为100%,浏览器默认尺寸为150,否则会报错Message: Unexpected error launching Internet Explorer. Browser zoom level was set to 150%. It should be set to 100%。注意这里并不是代码设置的尺寸,而是指的是浏览器设置的尺寸
-
- 需要调整安全的设置,将所有驱动的安全设置给打开,否则会Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.
-
- 设置路径:IE浏览器——设置——Internet选项——安全——Internet等选项中——勾选最下面的“启动保护模式”选框
-
- 注意 ,要勾选所有的保护模式,即Internet,本地Internet,受信任的站点,受限制的站点都需要勾选
webdriver安装常见的问题
- 如果出现以下报错,是因为selenium版本和urllib3版本冲突导致,可以下载urllib3,然后定向重新安装版本
webdiver支持的浏览器
from .firefox.webdriver import WebDriver as Firefox # noqa
from .firefox.firefox_profile import FirefoxProfile # noqa
from .firefox.options import Options as FirefoxOptions # noqa
from .chrome.webdriver import WebDriver as Chrome # noqa
from .chrome.options import Options as ChromeOptions # noqa
from .ie.webdriver import WebDriver as Ie # noqa
from .ie.options import Options as IeOptions # noqa
from .edge.webdriver import WebDriver as Edge # noqa
from .opera.webdriver import WebDriver as Opera # noqa
from .safari.webdriver import WebDriver as Safari # noqa
from .blackberry.webdriver import WebDriver as BlackBerry # noqa
from .phantomjs.webdriver import WebDriver as PhantomJS # noqa
from .android.webdriver import WebDriver as Android # noqa
from .webkitgtk.webdriver import WebDriver as WebKitGTK # noqa
from .webkitgtk.options import Options as WebKitGTKOptions # noqa
from .remote.webdriver import WebDriver as Remote # noqa
from .common.desired_capabilities import DesiredCapabilities # noqa
from .common.action_chains import ActionChains # noqa
from .common.touch_actions import TouchActions # noqa
from .common.proxy import Proxy # noqa
webdriver的简单实用
- 打开webdriver浏览器,全新打开,里面不会有任何数据,要使用代码:
webdriver.Chrome()
- 国产的浏览器,例如360,猎豹,遨游等,都是基于chromium内核定制修改,于chrome代码时类似的
- 全屏显示浏览器窗口,可使用代码
maximize_window()
- 使用with上下文管理器,可自动关闭浏览器
from selenium import webdriver
import time
with webdriver.Chrome() as driver:
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(5)
selenium 工作原理
- webdriver协议,其目的是用来制定通讯的规则
- werbdriver协议,是selenium基于http协议设计并定义的协议,各大浏览器厂商都提供了实现该协议的驱动程序,通过这套协议,我们可以操作里欧兰奇实现各种控制动作,例如打开,关闭,最大化,最小化,元素定位,元素操作等
- 简单的来说,步骤如下:
-
- 首先,selenium客户端(可能是java,python等代码编写),启动驱动程序,通过驱动打开浏览器,建立链接并获得session ID
-
- 然后,selenium客户端通过webdriver协议通讯,发送指令给不同浏览器厂商开发的驱动程序
-
- 驱动程序会讲自己内部将指令翻译,再去讲翻译后的指令转发给浏览器
-
- 浏览器就能够去执行对应的指令并将结果告诉客户端