前言
测试行业现在70%是以手工测试为主,那么只有20%是自动化测试,剩下的10%是性能测试。
有人可能会说,我现在做手工,我为什么要学自动化呢?我去学性能更好性能的人更少?
其实,性能的要求比自动化要求更高,那个是更高级别的了。
现在看一下手工测试工作,只有那么多,70%。但是每年的应届生却在增加。那么,你是想通过手工测试来挑战高薪吗?
根据国内普遍现象来看,手工测试的薪资没有后两者的高,这是不争的事实,后两者更具有难道和挑战。
绝大多数的情况下啊,没有绝对的啊,如果说你说你那个自动化刚工作的没有,我这个手工测试工作了4 5年的,那当然没有可比性。
那么如果说你的基础不好,你又想改变这个现状,那么你就只有学习或者培训。
目录
- web自动化测试
(web自动化测试认知、
网页前端基础、
Selenium测试框架、
web自动化测试实战)
- 自动化测试面试篇
(列表推导式、
冒泡排序、
快速排序、
网络分层、
web自动化中的验证码、
什么时候开始自动化测试)
第一章 Web自动化测试认知
1. 为什么要做Web自动化测试
- 什么是web自动化测试
- 让程序代替人,去验证网页上功能的过程
- web自动化测试与手工测试的比较
- web自动化测试执行的测试用例是手工功能测试的子集
- web自动化测试的优点是效率高,缺点是不具有发散性思维
- 需求频繁变更的情况下,web自动化测试代码维护成本高
3.什么场景下适合做web自动化测试 - 前提:版本稳定,无频繁的需求变更
- 无需思考、流程和结果已定、大量重复性的测试
- 冒烟测试
- 回归测试
4.为什么做web自动化测试 - 提高特定场景(特定项目质量把控环境)下的测试效率
2. 企业开发主流Web自动化测试技术介绍
- web自动化测试执行原理
2. web自动化测试框架如何定位到要操作的元素
3. web自动化测试-测试框架概览
- QTP:惠普公司产品,成绩风靡一时的web自动化软件
- Robot Framework:一款关键字驱动的自动化测试框架
- Selenium:当前最流行的,应用范围最广的自动化测试框架
3. Selenium自动化测试框架介绍及安装
- Selenium基本介绍
- 支持脚本录制和代码开发两种形式的自动化测试
- 官网地址:https://www.selenium.dev/
- 在企业中Selenium可以做什么
- web自动化测试
- 爬虫应用程序
- web自动化所需环境
- 浏览器:Chrome
- 驱动器:WebDriver
- Selenium插件安装:pip install selenium
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前端开发三要素
- web前端开发三要素
什么是HTMl?
- Html是超文本标记语言,是用来描述网页的一种标记语言
- HTML是一种标签规则的形式将内容呈现在浏览器中
- 可以以任意编辑器创建,其文件扩展名为.html或.htm保存即可
什么是CSS?
- CSS的中文名称为层叠样式表
- 是一种用来表现HTML或XML等文件样式的计算机语言
- 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页元素进行格式化
什么是JavaScript?
- 简称JS,但其与java开发语言没有任何的关系
- 被广泛的应用于web应用程序的开发
- 因为有了JS的加入,使得web应用程序可以实现各种页面动态效果
- 三者的关系
2. 常用浏览器及其内核
- 一般我们看到的浏览器
- 主流浏览器的内核
3. HTML标签及语法规范
-
HTML标签及语法规范
html标签是有尖括号保卫的关键词,例如<html>
-
HTML标签绝大多数的情况下是成对儿出现的
-
如
<html>
和</html>
,第一个标签是开始标签,第二个标签是结束标签 -
HTML标签极少情况下是单个儿出现的,我们称之为单标签
-
常见单标签
</br>0
,代表着换行的意思 -
标签与标签的关系:包含关系、并列函数
- 标签的包含关系(父子标签)
- 标签的并列关系(兄弟标签)
- 打开开发者工具(F12)
- 可以切换模式
- 里面就是这样的
4. HTML基本结构与环境搭建
- HTML基本结构
- 京东网站结构如下:
5. HTML常用标签以及HBuilder IDE的下载地址
-
HBuilder下载官网地址:
https://www.dcloud.io
- 进入官网,免费下载最新版的HBuilder。
- HBuilder目前有两个版本,一个是windows版,一个是mac版。下载的时候根据自己的电脑选择适合自己的版本。
- 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=""id="">
<option value="">选项1</option>
<option value="">选项2</option>
<option value="">选项3</option>
</select>
</body>
</html>
- 以上添加
<br>
代表段落 - 打开浏览器如下:
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" id="a">
<label for="a" class="lab1">普通登录</label>
<input type="radio" name="c" id="b">
<label for="b" class="lab2">手机动态密码登录</label>
</div>
<input type="text" name="" id="" placeholder="请输入注册手机/邮箱" class="user">
<div class="pwpwpw">
<input type="password" name="" id="" placeholder="请输入密码" class="user1">
<div class="yzm-img">
获取手机动态验证码
</div>
</div>
<div class="jizhu">
<input type="checkbox" name="" id="e">
<label for="e">30天内自动登录</label>
<span>记住密码</span>
</div>
<div class="login">
登 录
</div>
<div class="line2"></div>
<div class="txt">
您也可以用合作网站的帐号登录去i旅行网
</div>
<div class="tu">
<img src="./img/44.png" alt="">
</div>
</div>
7. CSS基础
- CSS简介
- CSS的主要作用就是美化网页,进行页面布局
- 更具体的说,CSS可以做字体大小,颜色,对齐方式等;图片的外形;页面的布局以及外观显示样式等等
- CSS基础
- CSS由两个部分组成:选择器和多条式式式明
- CSS的样式代码写在head标签中的子标签style中
- CSS基础总结
- 通过选择器可以具体指定修改HTML中具体谁的样式
- 选择器后边的大括号内是具体要修改的样式声明
- 样式的声明是由键值对儿的形式出现的,如key:value
- 属性和属性值之间使用英文冒号(:)进行分隔
- 多个键值儿之间使用英文分号(:)进行分隔
8. CSS选择器
- CSS选择器的作用:
根据不同的需求把不同的标签选出来 - CSS选择器有哪些:
标签选择器、类选择器、id选择器
- 标签选择器
- id选择器
- 类选择器
- 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 id="first">我只是一个盒子,空盒子</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=""id="">
<option value="">选项1</option>
<option value="">选项2</option>
<option value="">选项3</option>
</select>
</body>
</html>
保存之后打开百度刷新:
第四章 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选择器定位法二
- 浏览器完整的打开-关闭调用流程
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::“父级元素标签名”
//*[@id="list"]/dl/a/parent::dl
3、定位一组元素的第几个
xpath[数字] 注意:xpath是从1开始
例:定位第5个元素
//*[@id="list"]/dl/a[5]
4、定位到一组元素,但是需要从第n个开始
xpath[position()]
例:从第13个元素开始
//*[@id="list"]/dl/a[position()>12]
5、定位元素的属性值
xpath/@属性名
例:定位a标签的href属性值
//*[@id="list"]/dl/a/@href
6、定位标签的文本内容
xpath/text()
例:定位dd标签的文本内容
//*[@id="list"]/dl/a/dd/text()
6. 句柄切换和页面关闭操作
句柄,就是当前浏览器每个窗口的标识符,每个窗口的句柄具有唯一性,多用于页面切换与关闭指定页面;
接下来先做一个小实验,证明一下为啥需要用到句柄:
以百度新闻为例:
# -*- 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的方式返回
到这里,我们怎么知道当前标记的是哪个窗口的句柄呢(就是读取哪个窗口的代码)?我们可以关闭一个窗口,如果某个窗口被关闭了,那就证明标记的是哪个窗口的句柄,在后面增加下面这行代码
browser.close() #关闭当前标识的窗口
handles = browser.window_handles #获取所有窗口的句柄
print("全部窗口的句柄",handles )
我们会发现就算打开了新的窗口,并在页面上跳转到新的窗口,但是关闭的窗口仍然是最初始的窗口,所以这就证明由始至终都是标识第一个窗口的句柄,那我们就要在进行后面一系列操作之前,先标识到新窗口的句柄
这样子,我们就可以在新窗口进行一系列的操作啦,当然,切换窗口,也可以使用重定向的方式
第五章. 电商网站Web自动化测试实战( 编写京东搜索脚本)
1,打开京东页
京东首页地址:https://www.jd.com/,故进入京东首页如下:
2,打开浏览器开发者模式
定位元素前需先打开浏览器开发者模式,查看页面源码
例-打开chrome开发者模式:
windows:快捷键F12
Mac ios :快捷键option+command+i
3,元素定位
元素定位方法可参考:https://www.cnblogs.com/mini-monkey/p/12074940.html
一般元素id存在时,先根据id定位,其次是class、name属性,然后再是xpath、css等去定位。优先级不一定是这样的,小编一般习惯这样定位,大家可以根据实际情况选择合适的定位方式。(当一种方法无法定位到元素时,可尝试其他方法进行定位)
京东搜索商品加车过程如下:
首页点击搜索框->输入搜索关键词,点击搜索btn->点击商品(进入商详页)->点击“加入购物车”加车
实现搜索加车自动化操作可根据以上步骤展开编写,京东搜索商品加车脚本如下(以搜索“微波炉”为例):
备注:由于页面加载需要一定时间,可在需要等待的地方添加等待时间。
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
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()
运行后弹出窗口,打开浏览器则环境配置成功
环境配置成功后就可以进行相关操作了。
3. 元素定位
- 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[@id="kw" and @name="wd"]
浏览器的快捷键 F12 ----> Ctrl + F 打开定位栏
1、使用:标签名 + 节点属性定位 (可以家 and or)
- 语法://标签名[@属性名=值]
- //input[@id=“kw” and @name=“wd”]
2、使用:文本内容匹配:函数:text()
-
文本全部匹配:text()=“文本内容”
- //a[text()=“更多产品”]
-
文本部分匹配:contains(text(),部分文本内容)
- (译:康ten死)
- //a[contains(text(),“产品”)]
3、通过部分属性值匹配
- 语法://标签名[contains(@属性名,部分属性值)]
- //a[contains(@href,“om/more/”) and @class=“bri”]
4、层级定位:
- 先确定节点的父节点,在找子节点;单斜杠只能找到儿子级,不能找到孙子级;双斜杠兼容新高
- //div[@id=“u1”]//a[@name=“tj_login”]
5、xpath轴定位语法
使用语法:使用单斜杠
已知的元素定位/下面的轴名称::标签名称[@属性=值]
例://p[@title=“2016”]/following-sibling::p[@class=“name”]
轴名称及意思
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定位方式
以上就是常用的元素定位方法,大多数元素可以用以上方法定位到,如果有特殊元素无法定位,可以参考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[@id="u1"]//a[@name="tj_login"]').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, '//*[@id="kw"]')
# 根据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选择
总结
最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿
望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!