自动化测试

1、环境准备

1.1虚拟环境

环境管理一台计算机中,如果要测试多个项目,每个项目的运行使用python版本不同、使用的第三方工具包不同,如何管理?

使用虚拟环境,来让一台计算机,能同时安装不同的工具包(类似于一台计算机安装多个版本的QQ),测试不同的项目。

原理很简单:就是把系统安装中的Python复制一份另一个文件,这个文件就是virtualenv的环境,当进入一个virtualenv环境时,virtualenv会修改相关环境变量,让pythonpip均指向当前的virtualenv环境。

pip是python的包管理工具(电脑中的软件管家、应用商店)。

实现步骤:在cmd中指令安装

# 如果安装不成功或速度很卡,可以加上源
pip install 模块的名称 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 1、安装virtualenv
pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple

# 2、安装virtualenvwrapper,windows系统叫做virtualenvwrapper-win
pip install virtualenvwrapper-win
# 3、在电脑目录下,手动创建文件夹,用来保存虚拟环境的相关文件; 例如:D:\virtualenv

# 4、添加环境变量,变量名WORKON_HOME,值为上一步创建的文件目录。


# 5、打开cmd,使用指令创建虚拟环境(名称自定义),需要联网才能完成 mkvirtualenv 虚拟环境名称
mkvirtualenv 虚拟环境的名称
# 会在D盘创建文件夹D:\virtualenv\test_py3
mkvirtualenv test_py3
# 会在D盘创建文件夹D:\virtualenv\ecshop_py3
mkvirtualenv ecshop_py3

# 进入虚拟环境 
workon 虚拟环境名称 
# 例如:进入ecshop_py3
workon ecshop_py3回车

# 6、安装自己需要使用的模块
pip install 模块名称
# 默认安装最新版
pip install selenium
# 安装指定版本的模块
pip install selenium==4.3

# 其它常用指令:
# 生成依赖文件
pip freeze > requirements.txt
# 安装依赖文件
pip install -r requirements.txt



# 退出虚拟环境 
deactivate

# 删除虚拟环境 
rmvirtualenv 虚拟环境名称

# pip常用指令:
python的包管理工具,相当于计算机中的应用商店、软件管家。 

# 列出当前环境所安装的工具包
pip list
# 安装模块,默认安装最新版本
pip install 模块名称
# 安装模块,指定版本安装
pip install 模块名称==版本号

# 如果遇到网络问题,无法安装,报错
pip install 模块名称 -i https://pypi.tuna.tsinghua.edu.cn/simple 
# 卸载模块
pip uninstall 模块名称

1.2下载浏览器驱动

各浏览器下载地址:

Chrome 浏览器驱动: http://chromedriver.storage.googleapis.com/index.html

Edge 浏览器驱动:MicrosoftWebDriver http://selenium-release.storage.googleapis.com/index.html

Opera 浏览器驱动:operadriver http://selenium-release.storage.googleapis.com/index.html

设置浏览器驱动:

我们可以手动创建一个存放浏览器驱动的目录,如:C:\driver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。

我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“C:\driver”目录添加到 Path 的值中。

2、网页基本格式

html:超文本标记语言,标签预定义;
<!--
1、一个网页中有一对html标签,网页中的所有内容,都是在html标签中;
2、head标签:网页设置、配置信息、引入外部文件、标题等;一般在网页中不可见;
3、body标签:网页中所有的可见内容,文字、数字、符号、图片、链接、媒体文件等;
常见标签:
img表示图片src属性表示图片的地址,单标签;
a表示超链接标签,href属性表示链接地址,双标签;
表单标签form:输入框、密码框、点击按钮、单选框、复选框、文本框等;
input表示表单标签,type表示类型,text表示文本,input在页面中都保存在form表单域中;

<标签名称 属性名=属性值 属性名=属性值></标签名称>
<标签名称 属性名=属性值 属性名=属性值> 标签的内容 </标签名称>
<div id="kw"> 新闻 </div>

页面元素定位:
1、id定位:一个网页中,id是唯一值,不是所有标签都有id属性;
-->

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>百度一下,你就知道</title>
    </head>
    <body>
        <div>div标签的内容</div>

    </body>
</html>

3. Selenium

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器。

Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用,通过浏览器驱动运行。

4. xpath

1. XPath即为XML Path 的简称,它是一种用来确定XML/HTML文档中某部分位置的语言。
2. HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在Web应用中定位元素。

3.1 XPath 工具

XPath (XML Path Language) 是一门在xml和HTML文档中查找信息的语言,可用来在 XML和HTML 文档中对元素和属性进行遍历。Python的lxml库,利用XPath进行HTML的解析。

谷歌浏览器中安装xpath-helper工具,用来学习测试xpath语法。

3.2 选取节点(标签、元素)

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

每个html、xml的标签我们都称之为节点,其中最顶层的节点称为根节点。

下面列出了最常用的路径表达式:

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

举例:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点。
/bookstore 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径
bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。

3.3 谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()❤️] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=’eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

3.4 选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

3.5 选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
//book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

XPath功能非常强大,内置函数非常多,熟练使用之后,可以大大提升HTML信息的提取效率。

可以结合语法以及插件工具对元素的XPath进行确定。

项目练习:

需求:
    1). ecshop项目运行起来。
    2). 使用多种页面元素定位方式:分别实现,登录、退出、加入购物车、结算;自动化脚本设计
    3). 使用selenium登录QQ邮箱,要求输入账号和密码,如遇到验证码,可以登录不成功。
    4). 打开百度,点击hao123,定位hao123页面中的58同城,点击58同城,定位合租按钮,点击合租,获取租房信息的列表内容;
posted @ 2025-03-12 14:03  HuBigYang  阅读(46)  评论(0)    收藏  举报