Python+selenium Web自动化持续更新

本文详细介绍了Python+Selenium进行Web自动化测试的全过程,包括环境搭建、浏览器驱动下载、基本操作、元素定位、数据驱动、键盘鼠标操作、等待方式、无头模式、日志管理和POM模型等内容,旨在帮助读者掌握自动化测试的关键技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

保姆入门级Web自动化学习资料

前言

  • 本章内容需有一定Python基础,如何不懂的,请先学习Python。

什么??没有好的学习资料,给你准备好了!!

Web自动化环境搭建

软件准备

开始环境搭建

  安装python:双击自定义安装 或者 在cmd中输入python-3.7.0-amd64.exe的路径,即在电脑中存放的位置,回车即可弹出安装页面,勾选Add Python 3.7 to PATH,即自动配置环境变量。

如图:
在这里插入图片描述
下图显示安装成功:
在这里插入图片描述

  • 注:可以查看系统环境变量,发现D:\My pyhton3.7.0\Scripts;D:\My pyhton3.7.0;已经自动添加到了path中,这就是勾选Add Python 3.7 to PATH的效果.
    img
    python安装完成后可以在cmd界面输入python,会出现下图内容,说明python安装成功
    img
  1. 安装selenium:
  • 在cmd中运行pip install selenium 即可在线安装selenium,(ps:安装指定的版本可用pip install selenium==3.14.0)如图提示selenium安装成功。
    img
  • 使用pip show selenium 查看selenium版本信息
  1. 安装chrome浏览器
    ​ 该处使用谷歌浏览器64位的版本号为70.0.3538.67
  2. 将chromedriver.exe放到python的安装目录下(或者目录下的scripts下)
    img
    以上5步就搭建好python+selenium环境了

浏览器和驱动下载

在我学习Ui自动化时,总会遇到浏览器驱动版本问题,小伙伴也是一头雾水也找不到下载的地方,今天给大家整理

chromedriver版本 支持的chrome版本
v2.46 v72-74
v2.45 v70-72
v2.44 v69-71
v2.43 v69-71
v2.42 v68-70
v2.41 v67-69
v2.40 v66-68
v2.39 v66-68
v2.38 v65-67
v2.37 v64-66
v2.36 v63-65
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60

==============================================================================
在这里插入图片描述

谷歌浏览器驱动版本对应以及下载:

点击下载chrome的webdriver:http://npm.taobao.org/mirrors/chromedriver/
点击下载chrome的历史版本:https://www.chromedownloads.net/
点击进入谷歌官方版本对应页面:https://sites.google.com/a/chromium.org/chromedriver/downloads

edge浏览器驱动版本对应以及下载:

点击进入微软edge浏览器wendriver版本对应下载页面:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads

ie浏览器驱动官方地址:

点击进入ie浏览器driver下载:http://selenium-release.storage.googleapis.com/index.html
点击进入ie浏览器官方github:https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver

safari浏览器官方地址:

点击进入safari浏览器官方地址:https://developer.apple.com/safari/download/


浏览器基本操作

前言

 开始自动化测试之前,需了解浏览器的一些基本操作,以方便后续的自动测试。码上开始吧!

导入Selenium模块

from selenium import webdriver

浏览器基本操作

  • 打开网站
#! /usr/bin/python3
# @Author : 一凡

from selenium import webdriver

url = "http://localhost:8080/Shopping/index.jsp"
# 也可以用其它浏览器:比如Firefox()等等
brower = webdriver.Chrome()
# 打开浏览器
brower.get(url)
  • 设置休眠
#! /usr/bin/python3
# @Author : 一凡

from selenium import webdriver
import time

url = "http://localhost:8080/Shopping/index.jsp"
webdriver.Firefox
brower = webdriver.Chrome()
brower.get(url)
# 强制等待3秒
time.sleep(3)
  • 页面刷新
#! /usr/bin/python3
# @Author : 一凡

from selenium import webdriver

url = "http://localhost:8080/Shopping/index.jsp"
webdriver.Firefox
brower = webdriver.Chrome()
brower.get(url)
# 刷新页面
brower.refresh()
  • 前进和后退
#! /usr/bin/python3
# @Author : 一凡

from selenium import webdriver
import time

url = "http://localhost:8080/Shopping/index.jsp"
webdriver.Firefox
brower = webdriver.Chrome()
brower.get(url)
# 实际效果自己操作,当前就不做演式了
# 后退
brower.back()
# 前
brower.forward()
  • 设置窗口大小
#! /usr/bin/python3
# @Author : 一凡

from selenium import webdriver
import time

url = "http://localhost:8080/Shopping/index.jsp"
webdriver.Firefox
brower = webdriver.Chrome()
brower.get(url)
# 设置窗口大小
brower.set_window_size(1280, 720)
# 设置全屏
# brower.maximize_window()
  • 截屏
#! /usr/bin/python3
# @Author : 一凡

from selenium import webdriver
import time

url = "http://localhost:8080/Shopping/index.jsp"
webdriver.Firefox
brower = webdriver.Chrome()
brower.get(url)
brower.get_screenshot_as_file("./test.png")
# 退出浏览器进程
brower.quit()
  • 退出
#! /usr/bin/python3
# @Author : 一凡

from selenium import webdriver
import time

url = "http://localhost:8080/Shopping/index.jsp"
webdriver.Firefox
brower = webdriver.Chrome()
brower.get(url)
time.sleep(3)
# 退出浏览器进程
brower.quit()

为什么要学习定位

  • 让程序操作指定元素,就必须先找到此元素;
  • 程序不像人类用眼睛直接定位到元素;
  • webDriver提供了八种定位元素的方式。
    在这里插入图片描述
  • 定位总结
    • id、name、class_name、tag_name:根据元素的标签或元素的属性来进行定位
    • link_text、partial_link_text:根据超链接的文本来进行定位(a标签)
    • xpath:为元素路径定位–重点
    • css:为css选择器定位(样式定位)

常见定位方式

id

  • 说明:HTML规定id属性在整个HTML文档中必须是唯一的,id定位就是通过元素的id属性来定位元素;
  • 前提:元素有id属性
  • id定位方法:find_element_by_id()
  • 实现案例-1需求:打开百度界面(https://www.baidu.com/),通过id定位,输入信息,点击百度的钮
# -*- coding:utf-8 -*-
# @Author  : 一凡

from selenium import webdriver
import time

url = "https://www.baidu.com/"
driver = webdriver.Chrome()
driver.get(url)
driver.find_element_by_id("kw").send_keys("好好学习|天天向上")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

name

  • 说明:HTML规定name属性来指定元素名称,name定位就是根据name属性来定位
  • 前提:元素有name属性
  • name定位方法:find_element_by_name()
  • 实现案例-2需求:打开百度(https://www.baidu.com/),通过name定位
# -*- coding:utf-8 -*-
# @Author  : 一凡

from selenium import webdriver
import time

url = "https://www.baidu.com/"
driver = webdriver.Chrome()
driver.get(url)
driver.find_element_by_name("wd").send_keys("好好学习|天天向上")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

class_name

  • 说明:HTML规定class来指定元素的类名,class定位就是根据class属性来定位,用法和name,id类似。
  • 前提:元素有class属性
  • class_name定位方法:find_element_by_class_name()
  • 实现案例-3需求:打开百度界面(https://www.baidu.com/),通过class定位
# -*- coding:utf-8 -*-
# @Author  : 一凡

from selenium import webdriver
import time

url = "https://www.baidu.com/"
driver = webdriver.Chrome()
driver.get(url)
driver.find_element_by_class_name("s_ipt").send_keys("好好学习|天天向上")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

tag_name

  • tag_name是通过标签名称来定位的,如:a标签
  • 注:由于HTML源码中,经常会出现很多相同的的标签名,所以一般不使用该定位方式
# -*- coding:utf-8 -*-
# @Author  : 一凡

from selenium import webdriver
import time

# 这里使用优设导航的百度搜索界面
# 获取浏览器对象
driver = webdriver.Chrome()
# 获取网络链接
url = "https://hao.uisdc.com/"
driver.get(url)
time.sleep(3)
# 获取搜索输入框,输入:优设导航的百度搜索
driver.find_element_by_tag_name("input").send_keys("优设导航的百度搜索")
# 暂停3秒
time.sleep(3)
# 退出浏览器驱动
driver.quit()

link_text

  • 说明:link_text定位于前面4个定位有所不同,它专门用来定位超链接文本(文本值)
  • 前提:定位的元素是链接标签(a标签)
  • link_text定位方法:find_element_by_link_text()
  • 实现案例-5需求:打开百度首页,通过link_text(链接文本)定位到【新闻】按钮,并进行点击操作
# -*- coding:utf-8 -*-
# @Author  : 一凡

from selenium import webdriver
import time

url = "https://www.baidu.com/"
driver = webdriver.Chrome()
driver.get(url)
driver.find_element_by_link_text("新闻").click()
time.sleep(3)
driver.quit()

partial_link_text

  • 说明:partial_link_text定位是对link_text定位的补充,partial_link_text为模糊匹配;link_text为全部匹配。
  • 前提:定位的元素是链接标签(a标签)
  • partial_link_text定位方法:find_element_by_partial_link_text()
  • 通过传入a标签局部文本或全部文本来定位元素,要求输入的文本能够唯一找到这个元素
  • 实现案例-6需求:打开百度新闻(http://news.baidu.com/),通过partial_link_text定位任何一条新闻,并进行点击操作
# -*- coding:utf-8 -*-
# @Author  : 一凡

from selenium import webdriver
import time

url = "http://news.baidu.com/"
driver = webdriver.Chrome()
driver.get(url)
driver.find_element_by_partial_link_text("守护蓝色地球").click()
time.sleep(3)
# driver.quit()

元素组

  • 元素组定位方式:find_elements_by_xxx
    作用:
    • 查找返还定位所有符合条件的元素
    • 返还的定位元素格式为列表格式
      说明:
    • 列表数据格式的读取需要指定下标(下标从0开始)
    • 案例要求:打开百度页面https://www.baidu.com/,通过元素组定位
      在这里插入图片描述
  • 定位:“//*[@id=‘s-top-left’]/a”
# -*- coding:utf-8 -*-
# @Author  : 一凡

from selenium import webdriver

url = "https://www.baidu.com/"
driver = webdriver.Chrome()
driver.get(url)
path  = "//*[@id='s-top-left']/a"
elements = driver.find_elements_by_xpath(path)
# 返回列表
print(len(elements))
# 通过列表方法获取相应的元素进行点击
elements[0].click()

xpath定位详解

通过常见属性定位

# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver

brower = webdriver.Chrome()
brower.get( "https://www.baidu.com" )
# xpath通过id定位
brower.find_element_by_xpath("//*[@id= 'kw']").click()
# xpath通过name定位
brower.find_element_by_xpath("//*[@name='wd']").click()
# xpath通过class_name定位
brower.find_element_by_xpath("//*[@class='s_ipt' ]").click()

通过其它属性

  • 如果一个元素id、name、class属性都没有,这时候也可以通过其它属性定位到
# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver

brower = webdriver.Chrome()
brower.get( "https://www.baidu.com" )
#用xpath通过其它属性定位
brower.find_element_by_xpath("//*[@autocomplete='off']").send_keys("Python")

标签

  • 有时候同一个属性,同名的比较多,这时候可以通过标签筛选下,定位更准一点
  • 如果不想制定标签名称,可以用*号表示任意标签
  • 如果想制定具体某个标签,就可以直接写标签名称
# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver

brower = webdriver.Chrome()
brower.get( "https://www.baidu.com" )
#用xpath通过其它属性定位
brower.find_element_by_xpath("//input[@id='kw']").send_keys( "Pthon")

层级定位

  • 如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它老爸(图中数字1)
  • 找到它老爸后,再找下个层级就能定位到了
    在这里插入图片描述
  • 如上图所示,要定位的是input这个标签,它的老爸的 class=“sec-input-box yuyin-cur”
  • 要是它老爸的属性也不是很明显,就找它爷爷id=form(图中数字2)
  • 于是就可以通过层级关系定位到
# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver


brower = webdriver.Chrome()
brower.get( "https://www.sogou.com" )

#通过老爸的span的class属性定位输入框
brower.find_element_by_xpath("//span[@class='sec-input-box']/input").send_keys("Python")

#通过爷爷的form的id属性来定位输入框
brower.find_element_by_xpath("//form[@id='sf']/span/input").send_keys("Python")

索引

  • 百度主页–设置–搜索设置
  1. 如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。
  2. 虽然双胞胎兄弟很难识别,但是出生是有先后的,于是可以通过它在家里的排行老几定位到。
  3. 如下图三胞胎兄弟
  4. 用xpath定位老大、老二和老三(这里索引是从1开始算起的,跟Python的索引不一样)
    在这里插入图片描述
# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver

brower = webdriver.Chrome()
brower.get( "https://www.baidu.com" )

##定位设置
brower.find_element_by_link_text("设置").click()##定位搜索设置
# brower.find_element_by_xpath("html/body/div[1]/div[6]/a[1]").click()

#定义每页显示10条
brower.find_element_by_xpath("//select[@id='nr']/option[1]")
#定义每页显示20条
brower.find_element_by_xpath("//select[@id='nr']/option[2]")
# 定义每页显示50条
brower.find_element_by_xpath("//select[@id='nr']/option[3]")

逻辑

  1. xpath还有一个比较强的功能,是可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)
  2. 一般用的比较多的是and运算,同时满足两个属性
# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver


brower = webdriver.Chrome()
brower.get( "https://www.baidu.com" )

# xpath逻辑运算
brower.find_element_by_xpath("//*[id='kw' and name='wd']")

定位总结

定位单个元素

1.id定位:find_element_by_id(self, id_)
2.name定位:find_element_by_name(self, name)
3.class定位:find_element_by_class_name(self, name)
4.tag定位:find_element_by_tag_name(self, name)
5.link定位:find_element_by_link_text(self, link_text)
6.partial_link定位find_element_by_partial_link_text(self, link_text)

下面两种要重点掌握其中一种,两者都会是更好的。现在我比较喜欢用xpath定位
7.xpath定位:find_element_by_xpath(self, xpath)
8.css定位:find_element_by_css_selector(self, css_selector)

定位一组元素

1.id复数定位find_elements_by_id(self, id_)
2.name复数定位find_elements_by_name(self, name)
3.class复数定位find_elements_by_class_name(self, name)
4.tag复数定位find_elements_by_tag_name(self, name)
5.link复数定位find_elements_by_link_text(self, text)
6.partial_link复数定位find_elements_by_partial_link_text(self, link_text)
7.xpath复数定位find_elements_by_xpath(self, xpath)
8.css复数定位find_elements_by_css_selector(self, css_selector)

如何定位多个元素呢?
在这里插入图片描述

# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver

brower = webdriver.Chrome()
brower.get("https://www.baidu.com/")#elements注意这个后面带有s,即复数的意思

elements = brower.find_elements_by_xpath("//*[@class='mnav']")#返回形式为列表形式
print(type(elements))
print(elements)

操作元素

# -*- coding: utf-8 -*-
# @Author : 一凡

from selenium import webdriver

brower = webdriver.Chrome()
brower.get("https://www.baidu.com/")#elements注意这个后面带有s,即复数的意思

elements = brower.find_elements_by_xpath("//*[@class='mnav']")#返回形式为列表形式
print(type(elements))
print(elements)

# 获取元素text信息(此步骤可省略)列表下标从o开始
print(elements[3].text)
#列表索引方法获取视频元素,并进行点击操作
elements[3].click()
brower.quit()

数据驱动

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上开始

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值