Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

时间:2023-02-15 15:05:51

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
测试行业现在70%是以手工测试为主,那么只有20%是自动化测试,剩下的10%是性能测试。
有人可能会说,我现在做手工,我为什么要学自动化呢?我去学性能更好性能的人更少?

其实,性能的要求比自动化要求更高,那个是更高级别的了。
现在看一下手工测试工作,只有那么多,70%。但是每年的应届生却在增加。那么,你是想通过手工测试来挑战高薪吗?

根据国内普遍现象来看,手工测试的薪资没有后两者的高,这是不争的事实,后两者更具有难道和挑战。

绝大多数的情况下啊,没有绝对的啊,如果说你说你那个自动化刚工作的没有,我这个手工测试工作了4 5年的,那当然没有可比性。

那么如果说你的基础不好,你又想改变这个现状,那么你就只有学习或者培训。

目录

  1. web自动化测试

(web自动化测试认知、
网页前端基础、
Selenium测试框架、
web自动化测试实战)

  1. 自动化测试面试篇

(列表推导式、
冒泡排序、
快速排序、
网络分层、
web自动化中的验证码、
什么时候开始自动化测试)

第一章 Web自动化测试认知

1. 为什么要做Web自动化测试

  1. 什么是web自动化测试
  • 让程序代替人,去验证网页上功能的过程
  1. web自动化测试与手工测试的比较
  • web自动化测试执行的测试用例是手工功能测试的子集
  • web自动化测试的优点是效率高,缺点是不具有发散性思维
  • 需求频繁变更的情况下,web自动化测试代码维护成本高
    3.什么场景下适合做web自动化测试
  • 前提:版本稳定,无频繁的需求变更
  • 无需思考、流程和结果已定、大量重复性的测试
  • 冒烟测试
  • 回归测试
    4.为什么做web自动化测试
  • 提高特定场景(特定项目质量把控环境)下的测试效率

2. 企业开发主流Web自动化测试技术介绍

  1. web自动化测试执行原理

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
2. web自动化测试框架如何定位到要操作的元素
Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
3. web自动化测试-测试框架概览

  • QTP:惠普公司产品,成绩风靡一时的web自动化软件
  • Robot Framework:一款关键字驱动的自动化测试框架
  • Selenium:当前最流行的,应用范围最广的自动化测试框架

3. Selenium自动化测试框架介绍及安装

  1. Selenium基本介绍
  1. 在企业中Selenium可以做什么
  • web自动化测试
  • 爬虫应用程序
  1. web自动化所需环境
  • 浏览器:Chrome
  • 驱动器:WebDriver
  • Selenium插件安装:pip install selenium

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

3. 第一个web自动化程序

  • 输入以下代码之后,然后打开浏览器(百度),返回看python就打印出:百度一下,你就知道
from selenium import  webdriver
from selenium.webdriver.chrome.service import Service
# 老版本的python和selenium是这样写的
# driver = webdriver.Chrome("./chromedriver.exe")
# 下边是新版本的写法
# driver.get("http://www.baidu.com")

selenium = Service("./chromedriver.exe")
driver = webdriver.Chrome(service=Service)
driver.get("http://www.baidu.com")
print(driver.title)

第二章 Web自动化测试必备技能-网页前端基础知识

1. Web前端开发三要素

  1. web前端开发三要素

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
什么是HTMl?

  • Html是超文本标记语言,是用来描述网页的一种标记语言
  • HTML是一种标签规则的形式将内容呈现在浏览器中
  • 可以以任意编辑器创建,其文件扩展名为.html或.htm保存即可

什么是CSS?

  • CSS的中文名称为层叠样式表
  • 是一种用来表现HTML或XML等文件样式的计算机语言
  • 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页元素进行格式化

什么是JavaScript?

  • 简称JS,但其与java开发语言没有任何的关系
  • 被广泛的应用于web应用程序的开发
  • 因为有了JS的加入,使得web应用程序可以实现各种页面动态效果
  1. 三者的关系

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

2. 常用浏览器及其内核

  1. 一般我们看到的浏览器
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  2. 主流浏览器的内核
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

3. HTML标签及语法规范

  1. HTML标签及语法规范
    html标签是有尖括号保卫的关键词,例如 <html>

  2. HTML标签绝大多数的情况下是成对儿出现的

  3. <html></html>,第一个标签是开始标签,第二个标签是结束标签

  4. HTML标签极少情况下是单个儿出现的,我们称之为单标签

  5. 常见单标签</br>0,代表着换行的意思

  6. 标签与标签的关系:包含关系、并列函数

  • 标签的包含关系(父子标签)
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  • 标签的并列关系(兄弟标签)
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  1. 打开开发者工具(F12)
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  • 可以切换模式
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  • 里面就是这样的
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

4. HTML基本结构与环境搭建

  • HTML基本结构

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

  • 京东网站结构如下:
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

5. HTML常用标签以及HBuilder IDE的下载地址

  1. HBuilder下载官网地址:

    https://www.dcloud.io

  • 进入官网,免费下载最新版的HBuilder。
  • HBuilder目前有两个版本,一个是windows版,一个是mac版。下载的时候根据自己的电脑选择适合自己的版本。
  1. HTML标签参考手册:https://www.w3school.com.cn/tags/index.asp
  • 这是我的第一个html页面
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>这是我的第一个html页面</title>
	</head>
	<body>
		<div>我只是一个盒子,空盒子</div>
		<div>我只是一个盒子,空盒子</div>
		<h1>我只是标题1</h1>
		<h2>我只是标题2</h2>
		<h3>我只是标题3</h3>
		<p>我是段落标签我是段落标签我是段落标签我是段落标签
		签我是段落标签我是段落标签我是段落标签我是段落标签
		我是落标签我是段<br>标签我是段落标签我是段落标签
		我是段落标签</p>
		<a href="http://www.baidu.com">我是连接跳转,跳转百度</a><br>
		
		<u1>我是无序列表
			<li>第一项</li>
			<li>第二项</li>
		</u1>
		
		<ol>
		<table border="1">
			<li>第一项</li>
			<li>第二项</li>
		</ol>
		
			<tr>
				<th>标题1</th>
				<th>标题2</th>
			</tr>
			<tr>
				<td>第一行第一列</td>
				<td>第一行的第二列</td>
			</tr>
			<tr>
				<td>第二行第一列</td>
				<td>第二行第二列</td>
			</tr>
		</table>
		<select> name="">
			<option value="">选项1</option>
			<option value="">选项2</option>
			<option value="">选项3</option>
		</select>
	</body>
</html>


Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

  • 以上添加<br>代表段落
  • 打开浏览器如下:

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

6. HTML静态页面实战一

<div class="box">
        <img src="./img/QQ截图20211207150902.png" class="img1">
        <div class="dec">
            <span class="z1">会员登录</span>
            <span class="z2">立即注册</span>
            <span class="z3">享积分换礼、返现等专属优惠</span>
        </div>
        <div class="line"></div>
        <div class="radio">
            <input type="radio" name="c" >
            <label for="a" class="lab1">普通登录</label>
            <input type="radio" name="c" >
            <label for="b" class="lab2">手机动态密码登录</label>
        </div>
        <input type="text" name="" >
        <div class="pwpwpw">
            <input type="password" name="" >
            <div class="yzm-img">
                获取手机动态验证码
            </div>
        </div>
        <div class="jizhu">
            <input type="checkbox" name="" >
            <label for="e">30天内自动登录</label>
            <span>记住密码</span>
        </div>
        <div class="login">
            登&nbsp;&nbsp;录
        </div>
        <div class="line2"></div>
        <div class="txt">
            您也可以用合作网站的帐号登录去i旅行网
        </div>
        <div class="tu">
            <img src="./img/44.png" alt="">
        </div>
    </div>
    

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

7. CSS基础

  1. CSS简介
  • CSS的主要作用就是美化网页,进行页面布局
  • 更具体的说,CSS可以做字体大小,颜色,对齐方式等;图片的外形;页面的布局以及外观显示样式等等

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

  1. CSS基础
  • CSS由两个部分组成:选择器和多条式式式明
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  • CSS的样式代码写在head标签中的子标签style中

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

  1. CSS基础总结
  • 通过选择器可以具体指定修改HTML中具体谁的样式
  • 选择器后边的大括号内是具体要修改的样式声明
  • 样式的声明是由键值对儿的形式出现的,如key:value
  • 属性和属性值之间使用英文冒号(:)进行分隔
  • 多个键值儿之间使用英文分号(:)进行分隔

8. CSS选择器

  1. CSS选择器的作用:
    根据不同的需求把不同的标签选出来
  2. CSS选择器有哪些:
    标签选择器、类选择器、id选择器
  • 标签选择器
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

  • id选择器
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  • 类选择器
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
  • HTML+CSS的表现
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>这是我的第一个html页面</title>
		<style>
			li {
				font-size: 50px;
				color: red;
			}
			ul li {
				background-color: black;
			}
			#first {
				font-size: 30px;
				color: blue;
			}
			.second{
				font-size: 20px;
				color: brown;
			}
		</style>
	</head>
	<body>
		<div >我只是一个盒子,空盒子</div>
		<div class="second">我只是一个盒子,空盒子</div>
		<h1>我只是标题1</h1>
		<h2>我只是标题2</h2>
		<h3>我只是标题3</h3>
		<p>我是段落标签我是段落标签我是段落标签我是段落标签
		签我是段落标签我是段落标签我是段落标签我是段落标签
		我是落标签我是段<br>标签我是段落标签我是段落标签
		我是段落标签</p>
		<a href="http://www.baidu.com">我是连接跳转,跳转百度</a><br>
		
		<u1>我是无序列表
			<li>第一项</li>
			<li>第二项</li>
		</u1>
		
		<ol>
		<table border="1">
			<li>第一项</li>
			<li>第二项</li>
		</ol>
		
			<tr>
				<th>标题1</th>
				<th>标题2</th>
			</tr>
			<tr>
				<td>第一行第一列</td>
				<td>第一行的第二列</td>
			</tr>
			<tr>
				<td>第二行第一列</td>
				<td>第二行第二列</td>
			</tr>
		</table>
		<select> name="">
			<option value="">选项1</option>
			<option value="">选项2</option>
			<option value="">选项3</option>
		</select>
	</body>
</html>

保存之后打开百度刷新:
Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

第四章 Selenium元素定位

1. 基本元素定位一

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# selenium = Service("../../chromedriver.exe")
# driver = webdriver.Chrome(service=Service)
# driver.get("http://www.baidu.com")

# # 使用id进行定位
# input_element = driver.find_element_by_id("kw")
# # 往输入框输入内容
# input_element.send_keys("凯学长")
# search_button = driver.find_element_by_id("su")
# # 点击搜索按钮
# search_button.click()

# 隐藏正在受到自动化测试软件的控制这句话
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('excludeSwitches',
                                       ['enable-automation'])
selenium = Service("../../chromedriver.exe")
driver = webdriver.Chrome(service=Service,options=chrome_options)
driver.get("http://www.baidu.com")


# 以下是新的写法
input_element = driver.find_element(by=By.ID,value="kw")
input_element.send_keys("凯学长")
search_button = driver.find_element(by=By.ID,value="su")
# 点击搜索按钮
search_button.click()

2. 基本元素定位二

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# selenium = Service("../../chromedriver.exe")
# driver = webdriver.Chrome(service=Service)
# driver.get("http://www.baidu.com")

# 使用id进行定位
# input_element = driver.find_element_by_id("kw")
# 往输入框输入内容
# input_element.send_keys("凯学长")
# search_button = driver.find_element_by_id("su")
# 点击搜索按钮
# search_button.click()

# 隐藏正在受到自动化测试软件的控制这句话
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('excludeSwitches',
                                       ['enable-automation'])
selenium = Service("../../chromedriver.exe")
driver = webdriver.Chrome(service=Service,options=chrome_options)
driver.get("http://www.baidu.com")

# 以下是新的写法
# input_element = driver.find_element(by=By.ID,value="kw")
# input_element.send_keys("凯学长")
# search_button = driver.find_element(by=By.ID,value="su")
# # 点击搜索按钮
# search_button.click()

# 把浏览器最大化
driver.maximize_window()

driver.get("https://www.jd.com")
# jd_search_input = driver.find_element(by=By.CLASS_NAME,value="text")
# jd_search_input.send_keys("电脑")
# jd_search_button = driver.find_element(by=By.CLASS_NAME,value="button")
# jd_search_button.click()
driver.find_element(by=By.LINK_TEXT,value="家用电器").click()
# driver.find_element(by=By.LINK_TEXT,value="平板电视").click()
# 当页面以一个新的页面打开时,将会出现多个句柄(就是浏览器的页面)
# 这个时候我们需要做的事情是切换操作句柄

# 句柄切换
# 拿到所有句柄
handlers = driver.window_handles
print(driver.title)
for h in handlers:
    if h !=driver.current_window_handle:
        # 切换到这个句柄上
        driver.switch_to.window(h)
    print("当前句柄是:" + driver.title)

driver.find_element(by=By.PARTIAL_LINK_TEXT,value="一体").click()

3. CSS选择器定位法一

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service("../../chomedriver.exe")
driver = webdriver.Chrome(service=service)

# 把浏览器最大化
driver.maximize_window()
driver.get("https://www.jd.com")
driver.find_element(by=By.CSS_SELECTOR,value="#key").send_keys("键盘")
driver.find_element(by=By.CSS_SELECTOR,
                    value="#search > div > div.from > button").click()

# css学习参考手册
# https://www.runoob.com/cssref/css-reference.html#animation

4. CSS选择器定位法二

  1. 浏览器完整的打开-关闭调用流程
from selenium import webdriver  #导入webdriver包

driver=webdriver.Chrome()   #初始化一个谷歌浏览器实例
driver.maximize_window()    #最大化浏览器
driver.implicitly_wait(8)   #设置隐式时间等待

driver.get("https://www.baidu.com") #通过get方法打开一个url站点

driver.quit()  #关闭并退出浏览器

5. xpath定位法

XPath 教程:
https://www.w3school.com.cn/xpath/index.asp
1、相对路径定位
//标签名[@属性名="属性值"]

2、定位某个元素的父级元素
元素xpath/parent::"父级元素标签名"

//*[@]/dl/a/parent::dl

3、定位一组元素的第几个
xpath[数字] 注意:xpath是从1开始

例:定位第5个元素

//*[@]/dl/a[5]

4、定位到一组元素,但是需要从第n个开始
xpath[position()]

例:从第13个元素开始

//*[@]/dl/a[position()>12]

5、定位元素的属性值
xpath/@属性名

例:定位a标签的href属性值

//*[@]/dl/a/@href

6、定位标签的文本内容
xpath/text()

例:定位dd标签的文本内容

//*[@]/dl/a/dd/text()

6. 句柄切换和页面关闭操作

句柄,就是当前浏览器每个窗口的标识符,每个窗口的句柄具有唯一性,多用于页面切换与关闭指定页面;
接下来先做一个小实验,证明一下为啥需要用到句柄:
以百度新闻为例:

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

# -*- coding:utf-8 -*-
import time
from selenium import webdriver

browser = webdriver.Chrome()
browser.set_window_size(1920, 1080)
browser.get("http://news.baidu.com/") #打开百度新闻页面
time.sleep(1)
handles = browser.window_handles #获取所有窗口的句柄
print("当前窗口的句柄",handles )  #这里输出所有窗口的句柄,当前只有一个窗口,所以输出的是当前窗口的句柄
browser.find_element_by_link_text("百度新闻客户端").click() #在百度新闻页面基础上(新窗口)打开百度新闻客户端页面
handles = browser.window_handles #获取所有窗口的句柄
print("全部窗口的句柄",handles ) #这里会输出两个句柄信息,以list的方式返回

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
到这里,我们怎么知道当前标记的是哪个窗口的句柄呢(就是读取哪个窗口的代码)?我们可以关闭一个窗口,如果某个窗口被关闭了,那就证明标记的是哪个窗口的句柄,在后面增加下面这行代码

browser.close() #关闭当前标识的窗口
handles = browser.window_handles #获取所有窗口的句柄
print("全部窗口的句柄",handles )

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

我们会发现就算打开了新的窗口,并在页面上跳转到新的窗口,但是关闭的窗口仍然是最初始的窗口,所以这就证明由始至终都是标识第一个窗口的句柄,那我们就要在进行后面一系列操作之前,先标识到新窗口的句柄

这样子,我们就可以在新窗口进行一系列的操作啦,当然,切换窗口,也可以使用重定向的方式

第五章. 电商网站Web自动化测试实战( 编写京东搜索脚本)

1,打开京东页

京东首页地址:https://www.jd.com/,故进入京东首页如下:

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

2,打开浏览器开发者模式

定位元素前需先打开浏览器开发者模式,查看页面源码

例-打开chrome开发者模式:

  windows:快捷键F12

  Mac ios :快捷键option+command+i

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
3,元素定位

元素定位方法可参考:https://www.cnblogs.com/mini-monkey/p/12074940.html

一般元素id存在时,先根据id定位,其次是class、name属性,然后再是xpath、css等去定位。优先级不一定是这样的,小编一般习惯这样定位,大家可以根据实际情况选择合适的定位方式。(当一种方法无法定位到元素时,可尝试其他方法进行定位)

京东搜索商品加车过程如下:

首页点击搜索框->输入搜索关键词,点击搜索btn->点击商品(进入商详页)->点击“加入购物车”加车

实现搜索加车自动化操作可根据以上步骤展开编写,京东搜索商品加车脚本如下(以搜索“微波炉”为例):

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
备注:由于页面加载需要一定时间,可在需要等待的地方添加等待时间。

3. 实例代码详情

京东搜索加车总代码如下:

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
import unittest

# 访问浏览器
driver=webdriver.Firefox()
# 把浏览器最大化
driver.maximize_window()
# 智能等待 等待的时间是0-6秒
driver.implicitly_wait(6)

#访问百度首页
driver.get("https://www.baidu.com")
sleep(3)
print("百度首页句柄:",driver.current_window_handle)
print("百度首页标题:",driver.title)

# 访问京东网站
driver.get("https://www.jd.com")
# 搜索输入框
search_ele = driver.find_element(By.ID, 'key')
# 输入关键字-微波炉
search_ele.send_keys("微波炉")
# 点击搜索btn
button = driver.find_element(By.CLASS_NAME,"button").click()
sleep(1)

# 滑动至商品可见
# driver.execute_script("window.scrollBy(0,600)")
driver.find_element(by=By.XPATH,value="/html/body/div[5]/div[2]/div[2]/div[1]/div/div[2]/ul/li[1]").click()
sleep(3)
# 点击第一个商品-进入商详页:
ele=driver.find_element(by=By.XPATH,value="/html/body/div[5]/div[2]/div[2]/div[1]/div/div[2]/ul/li[1]/div/div[1]/a/img")
ele.click()

windows = driver.window_handles
# 切换至商详窗口
driver.switch_to.window(windows[-1])
# 向下滑动500个像素
driver.execute_script("window.scrollTo(0,500)")
# 点击加入购物车
driver.find_element(By.ID,"InitCartUrl").click()
  • (滑动至商品可见)与(点击第一个商品-进入商详页)的解决方案
driver.find_element(BY.xxx,yyyy).click()
分2步写:
ele=driver.find_element(BY.xxx,yyyy)
ele.click()

解决京东登录问题方法

  • 摘取请登录的id
    Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
import time
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from const import URL,DRIVER_PATH

    # 访问浏览器
    driver = webdriver.Firefox()
    # 把浏览器最大化
    driver.maximize_window()
    # 智能等待 等待的时间是0-6秒
    driver.implicitly_wait(6)

    # 访问百度首页
    driver.get("https://www.baidu.com")
    print("百度首页句柄:", driver.current_window_handle)
    print("百度首页标题:", driver.title)
    driver.get("https//www.jd.com")
    # 请登录
    driver.find_element(by=By.CSS_SELECTOR,value="class=link-login").click()
    # 下边的代码会一直循环
    # 知道我用手机扫码登录成功,它才不会循环了
    while True:
        print(driver.current_url)
        if driver.current_url == "https://www.jd.com/":
            break
        time.sleep(3)
    print("登录成功")
    driver.find_element(by=By.LINK_TEXT,value="我的购物车").click()
    time.sleep(3)


    # 访问浏览器
    driver = webdriver.Firefox()
    # 把浏览器最大化
    driver.maximize_window()
    # 智能等待 等待的时间是0-6秒
    driver.implicitly_wait(6)

    # 访问百度首页
    driver.get("https://www.baidu.com")
    print("百度首页句柄:", driver.current_window_handle)
    print("百度首页标题:", driver.title)
    driver.get("https//www.jd.com")
    # 请登录
    driver.find_element(by=By.CSS_SELECTOR, value="class=link-login").click()
    # 下边的代码会一直循环
    # 知道我用手机扫码登录成功,它才不会循环了
    while True:
        print(driver.current_url)
        if driver.current_url == "https://www.jd.com/":
            break
        time.sleep(3)
    print(driver.get_cookie())
    print("登录成功")

    cookies = [{'domain':'.jd.com','expiry':1655103538,'httpOnly':False}]
  
    driver.get("https://www.jd.com/")
    # 添加cookies
    for c in cookies:
        driver.add_cookie(c)

    driver.find_element(by=By.LINK_TEXT,value="我的购物车").click()
    time.sleep(3)

第六章 自动化介绍

1.自动化本质:

    用代码模拟鼠标或键盘对浏览器进行操作

其中包含三个对象:代码,浏览器,浏览器驱动,三者关系:

代码驱动浏览器驱动

浏览器驱动解析代码,并驱动浏览器

浏览器按指令操作

2、环境配置:

2.1 安装浏览器
检查系统有无浏览器,没有则安装(建议先查看有没有对应的驱动,根据驱动版本下载相应的浏览器)

2.2 安装浏览器对应的驱动,并将驱动文件放到python安装目录下
查看浏览器版本,根据浏览器版本下载驱动,将.exe文件放至python安装路径下

2.3 安装selenium

ctrl+r -->cmd-->pip install selenium

2.4 检查环境

from selenium import webdriver
driver=webdriver.Chrome()

运行后弹出窗口,打开浏览器则环境配置成功

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

环境配置成功后就可以进行相关操作了。

3. 元素定位

  1. Web页面的元素

1)图片

2)链接

3)文本框

4)按钮

5)下拉列表

6)视频

……

比如百度的首页,在这张页面上有输入框、按钮和文字链接等,自动化要做的就是模拟鼠标和键盘来操作这些元素,或单击,或输入等。 操作这些元素的前提是要找到它们,如何来找到它们?这就需要用到元素定位的方法来找到相应的元素再进行操作

4. 元素定位的方法

1)id

2)name

3)class name

4)tag name

5)link text

6)partial link text

7)css selector

8)xpath

5. 8大定位:

# 引入库
from selenium import webdriver


# 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
driver = webdriver.Chrome()      # 启动谷歌浏览器
# driver = webdriver.Firefox()   # 启动火狐浏览器
# driver = webdriver.Ie()        # 启动IE浏览器

# 访问百度首页
driver.get("http://www.baidu.com")

# 窗口最大化
driver.maximize_window() 

1. id定位---首选

#id定位,属性 + 操作 = 返回 webELement 对象
ele1 = driver.find_element_by_id("kw")
print(ele1)

2. 标签名定位 tag_name(译:泰格.内幕),不能唯一的找到特定的元素

ele2 = driver.find_element_by_tag_name("input")  # (译:泰格.内幕)在dom页面当中,匹配到的第一个元素
print(ele2)
eles = driver.find_elements_by_tag_name("input")    # 列表,元素为webELement对象  全部匹配的元素
print(eles)

3.class_name 定位  (不能唯一的找到特定的元素

driver.find_element_by_class_name("s_ipt")
driver.find_elements_by_class_name("s_ipt")

4.name 定位 不唯一

driver.find_element_by_name("wd")
driver.find_elements_by_name("wd")

以上四种元素定位针对所有元素

5.link_text 定位,完整匹配文本值

driver.find_element_by_link_text("更多产品")  

6.partial_link_text 定位,(扒手.理科.泰克斯特)部分匹配上

driver.find_element_by_partial_link_text("产品") 

1 开发不一定写,2、3、4、5、6 定位方法结果不唯一,不经常用

7. xpath 定位(谷歌)

语法

/:

-   绝对定位   —— 一般不用,兼容性太差,太依赖位置

//:

-   相对定位 —— 一般用相对定位,来进行定位
-   从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置  

.:

-   选取当前节点  

..:

-   选取当前节点的父节点  

@:

-   选取属性
-   @class="xxx" , 属性放在中括号 【】中    

*:

-   通配符。匹配所有 //*  

@*:

-   通配符。匹配所有属性 //*[@*="hello"]  

多条件查询,使用逻辑查询

-   and        全部为真
-   or          其中一个为真
-   语法://input[@]

浏览器的快捷键    F12  ---->   Ctrl + F 打开定位栏

1、使用:标签名 + 节点属性定位   (可以家  and   or)
  • 语法://标签名[@属性名=值]
  • //input[@]

2、使用:文本内容匹配:函数:text()
  • 文本全部匹配:text()="文本内容"

    • //a[text()="更多产品"]
  • 文本部分匹配:contains(text(),部分文本内容)

    • (译:康ten死)  
    • //a[contains(text(),"产品")]

3、通过部分属性值匹配
  • 语法://标签名[contains(@属性名,部分属性值)]
  • //a[contains(@href,"om/more/") and @class="bri"]

4、层级定位:
  • 先确定节点的父节点,在找子节点;单斜杠只能找到儿子级,不能找到孙子级;双斜杠兼容新高
  • //div[@]

5、xpath轴定位语法

使用语法:使用单斜杠

  已知的元素定位/下面的轴名称::标签名称[@属性=值]

    例://p[@title="2016"]/following-sibling::p[@class="name"]

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
轴名称及意思

ancestor:(译:昂赛斯 特儿)

  • 当前节点之前的所有父节点

parent:(译:潘润特)

  • 当前节点的父节点

preceding:(译:普瑞sei定)

  • 当前节点之前的所有节点

preceding-sibling:(译:普瑞 sei 定。塞玻璃)

  • 当前节点之前的所有同级节点

following:(译:fao lin)

  • 当前节点之后的所有节点

following-sibling:(译:fao lin 。塞玻璃)

  • 当前节点之后的所有同级节点

child

  • 当前节点的子节点

self

  • 当前节点本身

8. css 定位------自行搞定

css  效率比较高,难学,表达式比较长,可能看不懂;

xpath 是比css效率低,但是 xpath 稳定,简单

都是万能定位掌握一种就可以了

浏览器自带的css、xpath、js定位方式

Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!

以上就是常用的元素定位方法,大多数元素可以用以上方法定位到,如果有特殊元素无法定位,可以参考xpath的轴定位方式。

 from selenium import webdriver
import time

# 打开谷歌浏览器,建立会话。启动Chromedriver.exe  打开Chrome
driver = webdriver.Chrome()

# 访问百度首页
driver.get("http://www.baidu.com")
time.sleep(2)   # 强制等待2秒
# 定位某度首页登录按钮,点击登录按钮
driver.find_element_by_xpath('//div[@]').click()
time.sleep(2)   # 强制等待2秒
driver.quit()   # 关闭浏览器

6. selenium模块中的find_element_by_id方法无法使用,改用driver.find_element(by=By.ID, value=None)

如果遇到找不到方法的情况,如果自己的版本是最新的版本,那么很有可能这种方法已经不用了

可以去查看一下官方的文档,或者直接查看配置文件,对自己的代码进行修改

driver.find_element(By.XPATH, '//*[@]') 
# 根据xpath选择元素(万金油)
driver.find_element(By.CSS_SELECTOR, '#kw') 
# 根据css选择器选择元素
driver.find_element(By.NAME, 'wd') 
# 根据name属性值选择元素
driver.find_element(By.CLASS_NAME, 's_ipt') 
# 根据类名选择元素
driver.find_element(By.LINK_TEXT, 'hao123') 
# 根据链接文本选择元素
driver.find_element(By.PARTIAL_LINK_TEXT, 'hao') 
# 根据包含文本选择
driver.find_element(By.TAG_NAME, 'title') 
# 根据标签名选择
# 目标元素在当前html中是唯一标签或众多标签第一个时候使用
driver.find_element(By.ID, 'su') 
# 根据id选择

总结

最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿
望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!