前言



测试行业现在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自动化测试执行原理



2. web自动化测试框架如何定位到要操作的元素



3. web自动化测试-测试框架概览

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

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

  1. Selenium基本介绍
  1. 在企业中Selenium可以做什么
  • web自动化测试
  • 爬虫应用程序
  1. 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前端开发三要素

  1. web前端开发三要素



什么是HTMl?

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

什么是CSS?

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

什么是JavaScript?

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

2. 常用浏览器及其内核

  1. 一般我们看到的浏览器

  2. 主流浏览器的内核

3. HTML标签及语法规范

  1. HTML标签及语法规范

    html标签是有尖括号保卫的关键词,例如 <html>

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

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

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

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

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

  • 标签的包含关系(父子标签)

  • 标签的并列关系(兄弟标签)

  1. 打开开发者工具(F12)

  • 可以切换模式

  • 里面就是这样的

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

  • HTML基本结构

  • 京东网站结构如下:

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=""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">
登&nbsp;&nbsp;录
</div>
<div class="line2"></div>
<div class="txt">
您也可以用合作网站的帐号登录去i旅行网
</div>
<div class="tu">
<img src="./img/44.png" alt="">
</div>
</div>

7. CSS基础

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

  1. CSS基础
  • CSS由两个部分组成:选择器和多条式式式明

  • CSS的样式代码写在head标签中的子标签style中

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

8. CSS选择器

  1. CSS选择器的作用:

    根据不同的需求把不同的标签选出来
  2. 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选择器定位法二

  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::"父级元素标签名"

//*[@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. 元素定位

  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[@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选择

总结

最后送上一句话:

世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿

望,不在等待中拥有,而是在奋斗中争取。

如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

  1. Web 自动化测试框架 sweetest 介绍

    项目开源: https://github.com/tonglei100/sweetest 文章转载:https://segmentfault.com/a/1190000011612061 介绍 swe ...

  2. 20、什么样的项目适合Web自动化测试

    1.什么是Web自动化测试?概念:让程序代替人为自动验证Web项目功能的过程 2.什么Web项目适合做自动化测试 1.需求变动不频繁 2.项目周期长 3.项目需要回归测试 3.如阿进行Web自动化测试 ...

  3. RobotFrameWork Web自动化测试环境搭建

    前言 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验收 ...

  4. Python Web自动化测试入门与实战,从入门到入行

    Python Web自动化测试入门与实战 购买地址 · 京东:https://item.jd.com/69239480564.html   天猫:https://detail.tmall.com/it ...

  5. 从手工测试转型web自动化测试继而转型成专门做自动化测试的学习路线。

    在开始之前先自学两个工具商业web自动化测试工具请自学QTP:QTP的学习可以跳过,我是跳过了的.开源web自动化测试工具请自学Selenium:我当年是先学watir(耗时1周),再学seleniu ...

  6. Node.js结合Selenium做Web自动化测试

    发现腾讯课堂上有个node.js结合Selenium做Web自动化测试的教学视频, 听来感觉不错,一来老师讲的还不错,二来node.js这门语言会越来越热,学会总没什么坏处,三来发现CukeTest这 ...

  7. Web自动化测试工具调研

    背景 Web自动化测试越来越被重视, 因为现在Web已经是工程化的状态. 如何通过工具测试, 保证Web开发的质量,提升开发效率,是Web工具的诞生的来由. Web测试分为以下几个方面: 1. 界面测 ...

  8. Web自动化测试学习方向(Selenium)

    目前越来越多的人想学自动化测试,认为自动化测试好牛逼.经常在测试交流群里看见有HR发招聘广告说:招初级(功能测试),招中级(性能测试),招高级(自动化测试)...... 我不去讨论他们这个初中高级的说 ...

  9. TestNG测试框架在基于Selenium进行的web自动化测试中的应用

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...

  10. (转)Web自动化测试中的接口测试

    1.背景 1.1 Web程序中的接口 1.1.1 典型的Web设计架构 web是实现了基于网络通信的浏览器客户端与远程服务器进行交互的应用,通常包括两部分:web服务器和web客户端.web客户端的应 ...

随机推荐

  1. Dive into TensorFlow系列(2)- 解析TF核心抽象op算子

    本文作者:李杰 TF计算图从逻辑层来讲,由op与tensor构成.op是项点代表计算单元,tensor是边代表op之间流动的数据内容,两者配合以数据流图的形式来表达计算图.那么op对应的物理层实现是什 ...

  2. Selenium4+Python3系列(十) - Page Object设计模式

    前言 Page Object(PO)模式,是Selenium实战中最为流行,并且被自动化测试同学所熟悉和推崇的一种设计模式之一.在设计测试时,把页面元素定位和元素操作方法按照页面抽象出来,分离成一定的 ...

  3. kubernetes数据持久化PV-PVC详解(一)

    官方文档地址: https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/ 1. 什么是PV,PVC? 1.1 什么是P ...

  4. SQL语句查询关键字前期数据准备

    前期数据准备 create table emp( id int primary key auto_increment, name varchar(20) not null, gender enum(' ...

  5. Dev-Cpp下载与安装

    目录 一.介绍 Dev-Cpp 二.下载 Dev-Cpp 1.通过百度网盘下载 2.通过 SourceForge 官网下载 三.安装 Dev-Cpp 写在结尾的话 免责声明 大家好,这里是 main工 ...

  6. 【Java SE】Day02 数据类型转换、运算符、方法入门

    一.数据类型转换 1.自动转换 取值范围小在运算时会提升为取值范围大的类型 byte+int=int int+double=double 转换规则:byte.short.char-->int-- ...

  7. 【实时数仓】Day02-DWD、DIM层数据准备:各层职能、行为日志DWD层、业务日志DWD层及分流(Phoenix和HBASE)

    一.需求分析及实现思路 1.分层需求 建立数仓目的:增加数据计算的复用性 可以从半成品继续加工而成 从kafka的ODS层(数据一开始就读到了kafka)读用户行为数据和业务数据,并写回到kafka的 ...

  8. java逻辑运算中 | | 和 | 的区别

    本文主要阐明逻辑运算中 | |(短路或) 和 |(逻辑或) 的异同 | | 和 | 的相同之处: 只有二者都是假时,结果才为假,否则结果为true. | | 和 | 的不同之处在于: a | | b: ...

  9. AcWing342. 道路与航线

    原题链接 解题思路 这题用\(SPFA\)会被卡,所以我们不能用\(SPFA\) 但是观察数据我们可以发现对于道路,\(0≤C_i≤10^{5}\) 所以对于每个连通块(内部不存在航线),我们可以用\ ...

  10. python文件的写入与读出

    Python对文件的处理,新建目录,写入一个txt文件然后读取刚才写入的内容.这里是在windows系统演示,目录用"\".如果在linux系统,区别就是目录的斜杠号要用" ...