第2章-Selenium-API操作

news2024/11/28 8:39:20

目标:

1. 熟练应用八种元素定位方式
2. 掌握对元素和浏览器的操作方法
3. 掌握键盘鼠标的操作
4. 掌握元素等待的操作
5. 掌握下拉选择框、 警告框和滚动条的操作
6. 掌握如何切换frame框架和多窗口
7. 掌握如何实现窗口截图


1.元素定位
 

1. 掌握id、 name、 class_name、 tag_name、 link_text、 partial_link_text定位方式的使用
 

html页面由标签构成, 标签的基本格式如下:
<标签名 属性名1="属性值1" 属性名2="属性值2">文本</标签名>
示例:
<input id="username" type="text" name="username" placeholder="用户名" />
<div id="my_cart">
<span>我的购物车</span>
</div>
 

2. 浏览器开发者工具
浏览器开发者工具就是给专业的web应用和网站开发人员使用的工具。 包含了对HTML查看和编
辑、 Javascript控制台、 网络状况监视等功能, 是开发JavaScript、 CSS、 HTML和Ajax的得力助
手。
作用: 快速定位元素, 查看元素信息

如何使用浏览器开发者工具
安装
浏览器已默认安装, 可以直接使用
启动
快捷键: 一般在windows系统上打开浏览器开发者工具都是按F12
火狐浏览器: 在页面上点击右键选择‘查看元素’
谷歌浏览器: 在页面上点击右键选择‘检查’
使用
方法一: 在要查看的元素上点击右键选择‘查看元素’或者‘检查’
方法二: 先打开浏览器开发者工具, 点击选择元素的图标, 移动鼠标到要查看的元素, 然后点

3. 元素定位方式
Selenium提供了八种定位元素方式
1. id
2. name
3. class_name
4. tag_name
5. link_text
6. partial_link_text
7. XPath
8. CSS

素材: 

<!DOCTYPE html>
<html lang="zh-cn">
<head>
	<meta charset="UTF-8">
	<title>注册A</title>
	<style type="text/css">
		body{background: #F0F0F0}
		form{width: 500px;background: #C7C7E2;padding: 10px;margin-top: 10%;margin-left: 30%}
		input{padding: 5px;background: #f8f8f8}
		button{padding: 8px; background: #f8f8f8;border-radius: 5px}
		button:hover{padding: 10px; background: #2F4F4F}
		input:focus{background: #FFC0CB}
		/*span{display: none}*/
	</style>
	<script type="text/javascript">
	</script>
</head>
<body>
<form action="">
	<div id="zc">
		<fieldset>
		<legend>注册用户A</legend>
			<p id="p1">
				<label for="userA">账号A</label>
		 		<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value="">			
			</p>
	 		<p>
				<label for="password">密码A</label>		
				<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
	 		</p>
			<p>
				<label for="telA">电话号码A</label>
				<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">				
			</p>
			<p>
				<label for="emailA">电子邮件A</label>
				<input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value="">				
			</p>
				<button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
				<hr>
				<p><span>Span_tagName</span></p>
				<p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p>
				<p><a href="http://www.sina.com.cn" id="AAA">AA 新浪 网站</a></p>
				<p><a href="http://www.baidu.com" rel="nofo"></a></p>
				<p><a href="logout">我是a标签A</a></p>
				<p><a href="www.taobao.com" rel="">退出</a></p>
				<hr>
				<p>
					<select name="selecta" id="selectA">
						<option value="bj">A北京</option>
						<option value="sh">A上海</option>
						<option value="gz">A广州</option>
						<option value="cq">A重庆</option>
					</select>
				</p>
				<hr>
				<form action="">
					<label for=""><input type="radio" name="fruit" value="pga" id="pga">A苹果</label>
					<label for=""><input type="radio" name="fruit" value="jza" id="jza">A橘子</label>
					<label for=""><input type="radio" name="fruit" value="xja" id="xja">A香蕉</label>
					<label for=""><input type="radio" name="fruit" value="lia" id="lia" checked="">A梨</label>
					<label for=""><input type="radio" name="fruit" value="xga" id="xga">西瓜</label>
				</form>
				<form action="">
					<input type="checkbox" name="checkbox" value="汽车" id="qcA">汽车A<br>
					<input type="checkbox" name="checkbox" value="购物" id="gwA">购物A<br>
					<input type="checkbox" name="checkbox" value="旅游" id="lyA" readonly="">旅游A <br>
					<input type="checkbox" name="checkbox" value="音乐" id="yyA"disabled="">音乐A <br>
					<input type="button" value="取消A" disabled="" id="cancelA"><br>
					<input type="button" value="alerta" id="alerta" onclick="al()"> <br>
					<input type="file"  name="upfilea" value="">
				</form>
		</fieldset>		
	</div>
	<script>
		function al(){
			alert('我被被点击啦!')
		}
	</script>
</form>
<!-- <a href="http://www.sina.com.cn" target="myframe1">新浪</a>
<a href="http://www.hao123.com" target="myframe1">hao123</a>
<a href="http://www.taobao.com" target="myframe2">淘宝</a>
<a href="http://www.baidu.com" target="myframe2">百度</a><br>
<iframe src="http://www.baidu.com" frameborder="1" height="500" width="48%" name="myframe1"></iframe>
<iframe src="http://www.so.com" frameborder="1" height="500" width="48%" name="myframe2"></iframe>    -->
</body>
</html>


 

import time
from time import sleep
# 导包 webdriver
from selenium import webdriver

# 获取 火狐浏览器对象
#driver = webdriver.Firefox()

# 获取 谷歌浏览器对象
driver = webdriver.Chrome()

# 获取 Ie
# driver = webdriver.Ie()
"""
1. 导入selenium包 --> from selenium import webdriver
2. 导入time包 --> import time
3. 实例化浏览器驱动对象 --> driver = webdriver.Firefox()
4. 打开注册A.html --> driver.get(url)
5. 调用id定位方法 --> element = driver.find_element_by_id("")
6. 使用send_keys()方法输入内容 --> element.send_keys("admin")
7. 暂停3秒 --> time.sleep(3)
8. 关闭浏览器驱动对象 --> driver.quit()
"""
driver.get("E:\Python\测试资料\8天web自动化讲义\素材\注册A.html")
element=driver.find_element_by_id("userA")
element.send_keys("admin")
time.sleep(3)
driver.quit()

name定位
说明: name定位就是根据元素name属性来定位。 HTML文档中name的属性值是可以重复的。
前提: 元素有name属性
name定位方法
element = driver.find_element_by_name(name)
案例
需求: 打开注册A.html页面, 完成以下操作
1).使用name定位用户名, 输入: admin
2).使用name定位密码, 输入: 123456
3).3秒后关闭浏览器窗口
3.3 class_name定位
说明: class_name定位就是根据元素class属性值来定位元素。 HTML通过使用class来定义元素的样式。
前提: 元素有class属性
注意: 如果class有多个属性值, 只能使用其中的一个
class_name定位方法
element = driver.find_element_by_class_name(class_name)
案例
需求: 打开注册A.html页面, 完成以下操作
1).通过class_name定位电话号码A, 并输入: 18611111111
2).通过class_name定位电子邮箱A, 并输入: 123@qq.com
3).3秒后关闭浏览器窗口
3.4 tag_name定位
说明: tag_name定位就是通过标签名来定位;
HTML本质就是由不同的tag组成, 每一种标签一般在页面中会存在多个, 所以不方便进行精确定位,
一般很少使用
tag_name定位方法
element = driver.find_element_by_tag_name(tag_name)
如果存在多个相同标签, 则返回符合条件的第一个标签
如何获取第二个元素?
案例
需求: 打开注册A.html页面, 完成以下操作
1).使用tag_name定位用户名输入框, 并输入: admin
2).3秒后关闭浏览器窗口
 

"""
    需求:
        1. 使用tag_name定位方式,使用注册A.html页面,用户名输入admin
    方法:
        1. driver.find_element_by_tag_name("") # 定位元素方法
        2. send_keys() # 输入方法
        3. driver.quit() # 退出方法
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"D:\web自动化素材\素材\注册A.html"
driver.get(url)

# 使用tag_name定位用户名 并 输入admin
# 注意:页面中如果存在多个相同的标签名,默认返回第一个标签
driver.find_element_by_tag_name("input").send_keys("admin")

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

3.5 link_text定位
说明: link_text定位是专门用来定位超链接元素(<a>标签</a>), 并且是通过超链接的文本内容来定位元素

link_text定位方法
element = driver.find_element_by_link_text(link_text)
link_text: 为超链接的全部文本内容
案例
需求: 打开注册A.html页面, 完成以下操作
1).使用link_text定位(访问 新浪 网站)超链接, 并点击
2).3秒后关闭浏览器窗口
3.6 partial_link_text定位
说明: partial_link_text定位是对link_text定位的补充, link_text使用全部文本内容匹配元素,
而partial_link_text可以使用局部来匹配元素, 也可以使用全部文本内容匹配元素。
partial_link_text定位方法
element = driver.find_element_by_partial_link_text(partial_link_text)
partial_link_text: 可以传入a标签局部文本-能表达唯一性
案例
需求: 打开注册A.html页面, 完成以下操作
1).使用partial_link_text定位(访问 新浪 网站)超链接, 并点击
2).3秒后关闭浏览器窗口

"""
    需求:
        1. 使用link_text定位方式,使用注册A.html页面,点击 访问 新浪 网站 连接地址
    方法:
        1. driver.find_element_by_link_text("") # 定位元素方法
        2. click() # 点击方法
    注意:
        link_text:
            1. 只能定位a标签
            2. link_text定位元素的内容必须为全部匹配
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)

# 使用 link_text定位 访问 新浪 网站 <全部匹配>
# driver.find_element_by_link_text("访问 新浪 网站").click()
# 错误写法,没有全部匹配文本
# driver.find_element_by_link_text("访问").click()

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()


3.6 partial_link_text定位
说明: partial_link_text定位是对link_text定位的补充, link_text使用全部文本内容匹配元素,
而partial_link_text可以使用局部来匹配元素, 也可以使用全部文本内容匹配元素。

partial_link_text定位方法
element = driver.find_element_by_partial_link_text(partial_link_text)
partial_link_text: 可以传入a标签局部文本-能表达唯一性

案例
需求: 打开注册A.html页面, 完成以下操作
1).使用partial_link_text定位(访问 新浪 网站)超链接, 并点击
2).3秒后关闭浏览器窗口
 

"""
    需求:
        1. 使用partial_link_text定位方式,使用注册A.html页面,点击 访问 新浪 网站 连接地址
    方法:
        1. driver.find_element_by_partial_link_text("") # 定位元素方法
        2. click() # 点击方法
    注意:
        partial_link_text:
            1. 只能定位a标签
            2. partial_link_text定位元素的内容可以模糊部分值,但是必须能代表唯一性
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)

# 使用partial_link_text定位 使用模糊 唯一代表关键词
# driver.find_element_by_partial_link_text("访问").click()

# 没有使用唯一代表词  默认操作符合条件的第一个元素
# driver.find_element_by_partial_link_text("新浪").click()

# 使用全部匹配
driver.find_element_by_partial_link_text("访问 新浪 网站").click()

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

4.1 find_elements_by_xxx()
作用:
1). 查找定位所有符合条件的元素
2). 返回的定位元素格式为数组(列表)格式;
说明:
1). 列表数据格式的读取需要指定下标(下标从0开始)
4.2 案例
需求: 打开注册A.html页面, 完成以下操作
1).使用tag_name定位密码输入框(第二个input标签), 并输入: 123456
2).3秒后关闭浏览器窗口
4.2 案例
需求: 打开注册A.html页面, 完成以下操作
1).使用tag_name定位密码输入框(第二个input标签), 并输入: 123456
2).3秒后关闭浏览器窗口
4.3 示例代码
driver.find_elements_by_tag_name("input")[1].send_keys("123456")
 

"""
    需求:
        1. 使用partial_link_text定位方式,使用注册A.html页面,点击 访问 新浪 网站 连接地址
    方法:
        1. driver.find_element_by_partial_link_text("") # 定位元素方法
        2. click() # 点击方法
    注意:
        partial_link_text:
            1. 只能定位a标签
            2. partial_link_text定位元素的内容可以模糊部分值,但是必须能代表唯一性
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)

# 使用partial_link_text定位 使用模糊 唯一代表关键词
# driver.find_element_by_partial_link_text("访问").click()

# 没有使用唯一代表词  默认操作符合条件的第一个元素
# driver.find_element_by_partial_link_text("新浪").click()

# 使用全部匹配
driver.find_element_by_partial_link_text("访问 新浪 网站").click()

# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()


 

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

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

相关文章

【leetcode】622 二叉树的最大宽度

题目描述 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉树视作与满二叉树结构相同&#…

MATLAB 之 M 文件和程序控制结构(顺序、选择、循环)

文章目录 一、M 文件1. M 文件的建立与打开1.1 建立新的 M 文件1.2 打开已有的 M 文件 2. M 文件的分类 二、 程序控制之顺序结构1. 数据的输入2. 数据的输出3. 程序的暂停 三、程序控制之选择结构1. if 语句2. switch 语句3. try 语句 四、程序控制之循环结构1. for 语句2. wh…

畸变像差校正技术(畸变相位补偿)发展现状及其仿真实验研究-技术汇总-Matlab代码

▒▒本文目录▒▒ 一、引言二、物理方法2.1 基于二次曝光法的畸变像差补偿仿真实验验证 三、数值方法3.1 基于主成分分析法的畸变像差补偿仿真实验验证3.2 基于标准多项式拟合法的畸变像差校正仿真实验验证3.3 基于最小二乘拟合法的畸变像差校正仿真实验验证3.4 基于泽尼克多项…

Simulink 自动代码生成电机控制——永磁同步电机参数获取

目录 前言 极对数测量 电阻测量&#xff08;Rs&#xff09; 电感测量&#xff08;Ld和Lq&#xff09; 磁链测量 总结 前言 在建模之前或者需要更换一个新电机&#xff0c;需要获取目标电机的电气参数&#xff0c;如果参数不对&#xff0c;对于电流环参数的整定&#xff0…

2023/05/08~14 刷题记录

A - Plus and Multiply 题意&#xff1a; 题解&#xff1a; 题目说可以将集合里面的数字 *a 或者 b 操作&#xff0c;并将新的值放进集合中&#xff0c;首先想到 dfs 暴力求解&#xff0c;但是太暴力了&#xff0c;直接 时间超限 。通过观察我们可以知道&#xff0c;要求 n 是否…

前端模块化

什么是模块化 事实上模块化开发最终目的是将程序划分成一个个小的结构在这个结构中编写属于自己的逻辑代码&#xff0c;有自己的作用域&#xff0c;不会影响到其他的结构这个结构可以将自己希望暴露的变量、函数、对象等导出给其他结构使用。可以通过某种方式&#xff0c;导入…

电脑软件:国内最好用解压缩软件 7-Zip 新版本发布

5 月 9 日消息&#xff0c;7-Zip 是一款拥有极高压缩比的的开源压缩软件&#xff0c;支持 LZMA2 等 7 种开源算法&#xff0c;以及支持较广泛的压缩格式 .7z&#xff0c;体积不大&#xff08;1.5MB&#xff09;、功能完善&#xff0c;除了默认 UI 不符合国内审美外几乎没什么可…

Oracle数据库安装教程,并实现公网远程连接【内网穿透】

✨ 目录 &#x1f388; 前言&#x1f388; 1. 数据库搭建&#x1f388; 2. 内网穿透&#x1f388; 2.1 安装cpolar内网穿透&#x1f388; 2.2 创建隧道映射 &#x1f388; 3. 公网远程访问&#x1f388; 4. 配置固定TCP端口地址&#x1f388; 4.1 保留一个固定的公网TCP端口地址…

Java经典笔试题—day08

Java经典笔试题—day08 &#x1f50e;选择题&#x1f50e;编程题&#x1f95d;两种排序方法&#x1f95d;求最小公倍数 &#x1f50e;结尾 &#x1f50e;选择题 (1)下列选项中关于Java中super关键字的说法正确的是&#xff08;&#xff09; A.super关键字是在子类对象内部指代…

JAVA JDK下载安装手册

JDK的介绍与安装 JDK简介 JDK是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。编写 Java 程序必须使用 JDK&#xff0c;它提供了编译和运行 Java 程序的环境。是整个java开发的核心。 准备JDK 本次使用的是JDK1.8 如下所示: 下载完…

记两道AES-CBC题

文章目录 知识导入&#xff08;AES-CBC模式&#xff09;题一(buu [ACTF新生赛2020]crypto-aes 1)题目描述&#xff1a;题目分析&#xff1a;知识导入os.urandom(n)函数比特&#xff0c;字节&#xff0c;二进制数之间的关系AES.new(key,AES.MODE_CBC,iv) 题二(crack AES-CBC IV)…

小黑子—Java从入门到入土过程:第九章-IO流

Java零基础入门9.0 Java系列第九章- IO流1. 初识IO流2. IO流的体系2.1 字节流2.1.1 FileOutputStream 字符串输出流2.1.1 - I 字符串输出流的细节2.1.1 - II FileOutputStream写数据的3种方式2.1.1 -III FileOutputStream写数据的两个小问题 2.1.2 FileInputStream 字符串输入流…

点线面产生局部坐标系以及计算到世界坐标系的旋转矩阵

欢迎关注更多精彩 问题描述 给定点O&#xff0c;线段AB&#xff0c;平面OP&#xff0c;求以OP法向为某一轴&#xff0c;以AB在OP上的投影为另一轴&#xff0c;O为原点的局部坐标系。要求给出X,Y,Z轴的单位向量&#xff0c;以及原点O. 求出转换到世界坐标系的旋转矩阵RT。 如…

ChatGPT的简单了解

ChatGPT 是 InstructGPT 的同级模型&#xff0c;它经过训练可以按照提示中的说明进行操作并提供详细的响应。 InstructGPT论文&#xff1a;https://arxiv.org/pdf/2203.02155.pdf InstructGPT怎么准备和标记数据集&#xff1a;https://harryliu.blog.csdn.net/article/detail…

【连续介质力学】张量的性质2

张量的代数操作 张量的性质 张量迹 Tensor Trace 定义 e ^ i ⨂ e ^ j \hat e_i \bigotimes \hat e_j e^i​⨂e^j​的迹: T r ( e ^ i ⨂ e ^ j ) e ^ i ⋅ e ^ j δ i j Tr(\hat e_i \bigotimes \hat e_j) \hat e_i \cdot \hat e_j \delta_{ij} Tr(e^i​⨂e^j​)e^i​⋅…

总结如何申请注册 GitHub 教师教育优惠 Benefits for Teachers 来免费使用 copilot

目录 1. GitHub 教师教育优惠有什么2. 如何申请教师教育优惠呢2.1 选择学校2.2 更改个人信息2.3 准备证明材料2.4 提交申请2.5 遇到的问题2.5.1 问题 12.5.2 问题 22.5.3 问题 3 3. 申请免费的 GitHub Copilot 学生注册不在此处赘述了&#xff0c;网上有很多教程可以参考。但是…

软件测试面试面对HR提出的问题,怎么回答才不会被面试官“套路”

面试中&#xff0c;如何回答HR提出的问题很大程度上决定了面试能不能成功。 下面是软件测试人员在面试过程中经常被问到的10个问题&#xff0c;告诉你怎么回答才不会被面试官套路...... 请你做一个自我介绍 误区&#xff1a; 一般人回答这个问题过于平常&#xff0c;只说姓…

JVM学习(一)

一、JVM介绍 1.1基本概念 JVM 是可运行 Java 代码的假想计算机 &#xff0c;包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收&#xff0c;堆 和 一个存储方法域。JVM 是运行在操作系统之上的&#xff0c;它与硬件没有直接 的交互。 1.2 运行过程 我们都知道 Java …

1000W用户1Wqps高并发签到系统的架构和实操

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常有小伙伴面试的时候&#xff0c;遇到一个一个高并发 架构方面的问题&#xff0c;比如&#xff1a; (1) 高并发秒杀系统如何架构&#xff1f; (2) 高并发签到系统如何架构&#xff1f; (3) 等等等等… 刚…

【C++】函数高级

目录 &#x1f34a;一.函数的默认参数&#x1f34a; 1.默认参数的性质 2.函数默认参数的注意事项 &#x1f34e;二.函数的占位参数&#x1f34e; &#x1f34f;三.函数的重载 &#x1f34f; 1.重载的性质和条件 &#xff08;1&#xff09;修改参数的个数 &#xff…