web 自动化之 Selenium 元素定位和浏览器操作

文章目录

      • 一、元素定位的八大方法
        • 1、基于 id/name/class/tag_name 定位
        • 2、基于 a 标签元素的链接文本定位
        • 3、基于xpath定位
        • 4、css定位
      • 二、浏览器操作
        • 1、信息获取
        • 2、 浏览器关闭
        • 3、 浏览器控制

一、元素定位的八大方法

web 自动化测试就是通过代码对网页进行测试,在对网页进行测试之前,必须掌握如何

1、基于 id/name/class/tag_name 定位
2、基于 a 标签元素的链接文本定位
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
# type: WebElement
el_select=driver.find_element_by_id("kw")
#通过元素的name属性定位
el2=driver.find_element_by_name("wd")
# 通过标签定位 一般情况下 不用这个
el4=driver.find_element_by_tag_name("input")
# class属性定位
el3=driver.find_element_by_class_name("s_ipt")# 通过链接文本定位
el6=driver.find_element_by_link_text("新闻")
el6.click()
# 通过部分链接文本定位
el7=driver.find_element_by_partial_link_text("新")
el7.click()
# 返回元素列表[]
els=driver.find_elements_by_partial_link_text("新")
3、基于xpath定位
# 通过绝对路径定位
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
time.sleep(2)
# driver.find_element_by_xpath("xpath语句如何来写")
# 通过绝对路径定位(不要用) 不只是为了定位这个元素,考虑脚本的稳定 通过/从页面开
始标签一直导航到目标标签
el1=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[5]/div/di
v/form/span[1]/input")
# 通过相对路径定位 //开头 经常用到的方法
el2=driver.find_element_by_xpath("//form/span/input")
# 标签+索引=唯一定位目标标签
el3=driver.find_element_by_xpath("//form/span[1]/input")
# 唯一定位标签+属性
el4=driver.find_element_by_xpath("//form[@id='form']/span[1]/input[@id
='kw']")
# 唯一定位标签+多个属性
el5=driver.find_element_by_xpath("//form[@id='form'and @name='f']/span
[1]/input[@id='kw']")
# 标签+部分属性定位 s_ipt
el6=driver.find_element_by_xpath("//form/span[1]/input[substring(@class,
3)='ipt']")
el7=driver.find_element_by_xpath("//form/span[1]/input[contains(@id,'k
w')]")
el8=driver.find_element_by_xpath("//form/span[1]/input[starts‐with(@i
d,'k')]")
el9=driver.find_element_by_xpath("//div[@id='s‐top‐left']/a[text()='新
闻']")
# 元素操作:输入 send_keys
el7.send_keys("web 自动化测试")
time.sleep(2)
driver.close()
# copyxpath 页面工具复制
el10=driver.find_element_by_xpath('//*[@id="kw"]')
# //标签[属性]
# 通过文本定位
el11=driver.find_element_by_xpath("//a[text()='新闻']")
el6.click()
# xpath定位 =属性+文本+索引 综合使用
# xpath定位能否定位到
4、css定位
import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Chrome()
driver.get("https://www.baidu.com")
# 1通过绝对路径进行定位 一般不用
el1=driver.find_element_by_css_selector("html body div div div div div f
orm span input ")
el2=driver.find_element_by_css_selector("html>body> div> div> div> div >
div> form> span> input ")# 2通过id定位 #id属性值
# 3通过class属性定位 .class属性值 s_ipt
el3=driver.find_element_by_css_selector("#kw")
el4=driver.find_element_by_css_selector('.s_ipt')# 4通过其他属性定位,并且多个属性定位
el5=driver.find_element_by_css_selector("[autocomplete='off']")
el6=driver.find_element_by_css_selector("[autocomplete='off'][class='s_i
pt']")# 5通过标签定位 标签名+属性/id/class进行定位 组合定位
el7=driver.find_element_by_css_selector("input#kw")
el8=driver.find_element_by_css_selector("input.s_ipt")
el9=driver.find_element_by_css_selector("input[autocomplete='off']")#6通过层级定位 层级之间通过>或者空格隔开 相对路径
el10=driver.find_element_by_css_selector("form#form>span>input#kw")
# 通过兄弟节点定位
# 场景:同一个元素下面多一个相同的元素 多胞兄弟
# 第一个元素 标签:first‐child
# 第二个元素 标签:nth‐child(n)
# 最后元素 标签:last‐of‐type
el11=driver.find_element_by_css_selector("div#s‐top‐left>a:first‐child")
el12=driver.find_element_by_css_selector("div#s‐top‐left>a:nth‐
child(3)")
el13=driver.find_element_by_css_selector("div#s‐top‐left>a:last‐of‐
type")
# el13.click()
# el10.send_keys("chromedriver")
# time.sleep(2)
# driver.close()"""
定位多个元素
"""
ellist=driver.find_elements_by_css_selector("#kw")
print(ellist)
# 返回WebElement
el14=ellist[0]"""
元素定位是否通过一个方法,支持所有的定位方式定位到元素
find_element()
find_elements() 基于多个定位方式找到一组元素
"""el15=driver.find_element(By.CSS_SELECTOR,"#kw")
el16=driver.find_element(By.ID,"kw")
el14.send_keys("chromedriver")
time.sleep(2)
driver.close()
"""
webdriver底层关于元素定位 8+8+2=18
"""

二、浏览器操作

1、信息获取
print("浏览器名称",driver.name)
print("网站标题",driver.title)
print("网站地址",driver.current_url)
print("网站源码",driver.page_source)
2、 浏览器关闭
  • python 执行完毕会自动关闭
  • 退出浏览器 driver.quit()
  • 关闭当前窗口 driver.close()
3、 浏览器控制

代码是 driver.xxxxxx

driver.maximize_window() #最大化窗口
driver.set_window_size(390, 844) #设置窗口大小
driver.back() #回到空白页面
driver.forward() #前进到上一次访问的页面
driver.refresh() #刷新:地址不变,输入框的内容全部丢失

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端面经 作用域和作用域链

含义:JS中变量生效的区域 分类:全局作用域 或者 局部作用域 局部作用域:函数作用域 和 块级作用域ES6 全局作用域:在代码中任何地方都生效 函数中定义函数中生效,函数结束失效 块级作用域 使用let或const 声明 作用域链:JS查…

【C/C++】RPC与线程间通信:高效设计的关键选择

文章目录 RPC与线程间通信:高效设计的关键选择1 RPC 的核心用途2 线程间通信的常规方法3 RPC 用于线程间通信的潜在意义4 主要缺点与限制4.1 缺点列表4.2 展开 5 替代方案6 结论 RPC与线程间通信:高效设计的关键选择 在C或分布式系统设计中,…

两种方法求解最长公共子序列问题并输出所有解

最长公共子序列(Longest Common Subsequence, LCS)是动态规划领域的经典问题,广泛应用于生物信息学(如DNA序列比对)、文本差异比对(如Git版本控制)等领域。本文将通过​​自顶向下递归记忆化​​…

SpringBoot应急知识学习系统开发实现

概述 一个基于SpringBoot开发的应急知识学习系统,该系统提供了完整的用户注册、登录、知识学习与测评功能。对于开发者而言,这是一个值得参考的免费Java源码项目,可以帮助您快速构建类似的教育平台。 主要内容 5.2 注册模块的实现 系统采…

【Python 字符串】

Python 中的字符串(str)是用于处理文本数据的基础类型,具有不可变性、丰富的内置方法和灵活的操作方式。以下是 Python 字符串的核心知识点: 一、基础特性 定义方式: s1 单引号字符串 s2 "双引号字符串" s…

第十六届蓝桥杯大赛软件赛C/C++大学B组部分题解

第十六届蓝桥杯大赛软件赛C/C大学B组题解 试题A: 移动距离 问题描述 小明初始在二维平面的原点,他想前往坐标(233,666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用: 水平向右移动…

如何使用极狐GitLab 软件包仓库功能托管 npm?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 软件包库中的 npm 包 (BASIC ALL) npm 是 JavaScript 和 Node.js 的默认包管理器。开发者使用 npm 共享和重用代码&#xff…

Matlab 基于Hough变换的人眼虹膜定位方法

1、内容简介 Matlab220-基于Hough变换的人眼虹膜定位方法 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

chili调试笔记14 画线 页面布置 线条导出dxf

2025-05-08 09-05-06 llm画线 页面布置 expand有自己的格式 删了就会按照子元素格式 不加px无效 没有指定尺寸设置100%无效 怎么把线条导出dxf command({name: "file.export",display: "command.export",icon: "icon-export", }) export class…

蓝绿发布与金丝雀发布

蓝绿发布与金丝雀发布 一、蓝绿发布:像「搬家」一样安全上线1. 生活化故事2. 技术步骤拆解步骤①:初始状态步骤②:部署新版本到绿环境步骤③:内部验证绿环境步骤④:一键切换流量步骤⑤:监控与回滚 3. 蓝绿发…

【2025五一数学建模竞赛B题】 矿山数据处理问题|建模过程+完整代码论文全解全析

你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的美赛O奖、国赛国一的数学建模团队,我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析&#xff0c…

JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-02&#…

Yolo迁移训练-带训练源码

目录 下载Git 拉下yolo模型 下载labelimg 准备训练集 迁移训练 继续训练 下载Git Git - Downloading Package 拉下yolo模型 然后用克隆脚本拉下yolo模型 python clone_yolo.py import os import subprocess import sys import shutildef check_git_installed():"…

LangChain框架-PromptTemplate 详解

摘要 本文聚焦于 LangChain 框架中PromptTemplate提示词模板模块的深度解析,主要参考langchain_core.prompts源码模块与官方文档。系统梳理 LangChain 对提示词模板的封装逻辑与设计思路,旨在帮助读者构建全面、深入的知识体系,为高效运用LangChain 框架的提示词模板开发应用…

中小企业设备预测性维护三步构建法:从零到精的技术跃迁与中讯烛龙实践

在工业4.0浪潮中,中小企业常陷入"设备故障频发"与"数字化成本高企"的双重困境。本文基于半导体、食品加工等行业实证数据,结合中讯烛龙系统技术突破,为中小企业提供一套零基础、低门槛、可扩展的预测性维护实施框架&…

C30-函数

一 函数的优点 避免代码冗长模块化的设计思路(十分类似组装电脑)按功能划分,每个函数代表一个功能 二 函数的三要素 函数要先定义再使用(就像是变量一样)三要素: 函数名→体现功能参数列表 比如yf(x)→x就是参数又如yf(x,y)→x,y就是参数→参数的个数取决于需求 返回值:比如…

【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案

在使用 Spring Boot 构建多模块项目,集成 MyBatis-Plus 时,很多开发者会遇到类似如下启动报错: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…

pimpl与unique_ptr的问题

PImpl与std::unique_ptr组合 pimpl(Pointer to Implementation)是C程序开发中非常常用的技巧之一,它的好处有: 节省程序编译时间保持程序/库的二进制兼容性隐藏实现细节 举例一个常见的pimpl的使用示例: // a.h class Impl; //前置声明 c…

C++类和对象:构造函数、析构函数、拷贝构造函数

引言 介绍:C类和对象:构造函数、析构函数、拷贝构造函数 _涂色_博主主页 C基础专栏 一、类的默认成员函数 先认识一下类中的默认成员函数: 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类…

CTF - PWN之ORW记录

CTF - Pwn之ORW记录https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q