Selenium-API操作

2023-05-16

Selenium-API操作

  • 一、元素定位
    • 1. 如何进行元素定位?
    • 2.浏览器开发者工具
    • 2.1 如何使用浏览器开发者工具
  • 3. 元素定位方式
    • 3.1 id定位
      • 3.1.1 id定位方法
      • 3.1.2 案例
      • 3.1.3 案例实现步骤分析
    • 3.2 name定位
      • 3.2.1 name定位方法
      • 3.2.2 案例
    • 3.3 class_name定位
      • 3.3.1 class_name定位方法
      • 3.3.2 案例
    • 3.4 tag_name定位
      • 3.4.1 tag_name定位方法
    • 3.5 link_text定位
      • 3.5.1 link_text定位方法
    • 3.6 partial_link_text定位
      • 3.6.1 partial_link_text定位方法
    • 4.1 find_elements_by_xxx()
      • 4.1.1 案例
      • 4.1.2 实例代码

一、元素定位

目标:掌握id、name、class_name、tag_name、link_text、partial_link_text定位方式的使用

1. 如何进行元素定位?

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的得力助手。

作用:快速定位元素,查看元素信息
在这里插入图片描述

2.1 如何使用浏览器开发者工具

安装:
浏览器已默认安装,可以直接使用

启动:

  • 快捷键:一般在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

3.1 id定位

说明:id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的;
前提:元素有id属性

3.1.1 id定位方法

element = driver.find_element_by_class_name(class_name)

3.1.2 案例

案例演示环境说明: 
	受限于网络速度的影响,我们案例采用本地的html页面来演示。

需求:打开注册A.html页面,完成以下操作 
1).使用id定位,输入用户名:admin 
2).使用id定位,输入密码:123456 
3).3秒后关闭浏览器窗口

3.1.3 案例实现步骤分析

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()
# 导包
from selenium import webdriver
from time import sleep

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

# 打开url
# 注意:\反斜杠在python是转义字符  r:修饰的字符串,如果字符串中有转义字符,不进行转义使用
url = r"E:\浏览器\课堂素材\注册A.html"

# 使用双反斜杠 进行转义操作
# url = "E:\\浏览器\\课堂素材\\注册A.html"

# 使用本地浏览模式 前缀必须添加 file:///
# url = "file:///E:/浏览器/课堂素材/注册A.html"

# 复制浏览器地址
# url = "file:///E:/%E8%AF%BE%E5%A0%82/%E5%8C%97%E4%BA%AC/%E5%8C%97%E4%BA%AC%E5%8D%81%E6%9C%9F/Day01/02_%E5%85%B6%E4%BB%96%E8%B5%84%E6%96%99/%E6%B5%8F%E8%A7%88%E5%99%A8/%E8%AF%BE%E5%A0%82%E7%B4%A0%E6%9D%90/%E6%B3%A8%E5%86%8CA.html"
driver.get(url)

# 查找 用户名元素
username = driver.find_element_by_id("userA")

# 查找 密码元素
password = driver.find_element_by_id("passwordA")

# 用户名输入 admin  send_keys("内容")
username.send_keys("admin")

# 密码 输入 123456
password.send_keys("123456")

# 暂停3秒
sleep(3)

# 退出浏览器驱动
driver.quit()

3.2 name定位

说明:name定位就是根据元素name属性来定位。HTML文档中name的属性值是可以重复的。
前提:元素有name属性

3.2.1 name定位方法

element = driver.find_element_by_name(name)

3.2.2 案例

需求:打开注册A.html页面,完成以下操作 

1).使用name定位用户名,输入:admin 
2).使用name定位密码,输入:123456 
3).3秒后关闭浏览器窗口
# 导包
from selenium import webdriver
from time import sleep


# 获取浏览器对象
driver = webdriver.Firefox()
# 打开url
url = r"E:\浏览器\课堂素材\注册A.html"
driver.get(url)

# 查找用户名 输入admin
driver.find_element_by_name("userA").send_keys("admin")
# 查找密码 输入123456
driver.find_element_by_name("passwordA").send_keys("123456")

# 暂停3秒
sleep(3)
# 关闭浏览器
driver.quit()

3.3 class_name定位

说明:class_name定位就是根据元素class属性值来定位元素。HTML通过使用class来定义元素的样式。
前提:元素有class属性
注意:如果class有多个属性值,只能使用其中的一个

3.3.1 class_name定位方法

element = driver.find_element_by_class_name(class_name)

3.3.2 案例

需求:打开注册A.html页面,完成以下操作

 1).通过class_name定位电话号码A,并输入:18611111111 
 2).3秒后关闭浏览器窗口
# 导包
from selenium import webdriver
from time import sleep


# 获取浏览器对象
driver = webdriver.Firefox()
# 打开url
url = r"E:浏览器\课堂素材\注册A.html"
driver.get(url)

# 查找电话 输入 18611111111
driver.find_element_by_class_name("telA").send_keys("18611111111")


# 暂停3秒
sleep(3)
# 关闭浏览器
driver.quit()

3.4 tag_name定位

说明:tag_name定位就是通过标签名来定位;
HTML本质就是由不同的tag组成,每一种标签一般在页面中会存在多个,所以不方便进行精确定位, 一般很少使用

3.4.1 tag_name定位方法

element = driver.find_element_by_tag_name(tag_name) 
	如果存在多个相同标签,则返回符合条件的第一个标签 
	如何获取第二个元素?稍后讲解

3.5 link_text定位

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

3.5.1 link_text定位方法

element = driver.find_element_by_link_text(link_text) 
	link_text:为超链接的全部文本内容

3.6 partial_link_text定位

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

3.6.1 partial_link_text定位方法

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

4.1 find_elements_by_xxx()

作用:
	1). 查找定位所有符合条件的元素 
	2). 返回的定位元素格式为数组(列表)格式; 

说明:1). 列表数据格式的读取需要指定下标(下标从0开始

4.1.1 案例

需求:打开注册A.html页面,完成以下操作 

1).使用tag_name定位密码输入框(第二个input标签),并输入:123456 
2).3秒后关闭浏览器窗口

4.1.2 实例代码

driver.find_elements_by_tag_name("input")[1].send_keys("123456")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium-API操作 的相关文章

  • 使用 C#.net 中的私有存储库的身份验证读取 BitBucket API

    我已经尝试了几天让 BitBucket API 为我工作 但是当涉及到让它为具有身份验证的私有存储库工作时 将问题设置为私有 当它们设置为公开 无需身份验证 一切正常 代码示例如下 static void Main string args
  • 发送 Microsoft Graph 请求事件返回 400

    我能够通过将 JSON 请求发布到https graph microsoft com v1 0 me calendar events https graph microsoft com v1 0 me calendar events 我已经
  • 如何使用 Selenium Webdriver C# 替换 innerHTML 代码?

    HTML 代码
  • Web Api - 不允许捕获 405 方法

    截至目前 Web api 应用程序针对 405 方法不允许错误返回以下响应正文 我正在尝试更改响应正文 但我不知道如何使用委托处理程序 ApiControllerActionSelector 或过滤器 谁能帮我捕获服务器端的 405 错误
  • 如何获取优酷access_token

    我在哪里可以找到access token refresh token在我的优酷账号里 我找到了如何使用外部脚本通过 API 将视频上传到 youku com 但我需要access token refresh token使用它 您需要对优酷应
  • 如何在 NodeJS 中允许表单数据

    我最近创建了一个接受文件的 API 我正在尝试使用 Postman 测试 API 如果我使用发出帖子请求x wwww form urlencoded身体类型 一切正常 我得到了所有预期的数据 唯一的问题是它不允许发送文件 如果我使用form
  • 如何将 Live API for Contacts 的响应中的哈希值转换为文本

    我集成了 Live JS api 来获取用户的实时联系人 它以哈希格式 email hash 返回电子邮件 我如何使用 javascript 或 c net 转换为可读文本 非常感谢 我遇到了同样的问题 并且找到了解决方案 您所需要做的就是
  • Selenium Webdriver - Firefox 中元素不可点击错误

    通常在 Chrome 驱动程序中出现的元素不可点击错误也恰好在 Firefox 中出现 显示的错误消息 Exception in thread main org openqa selenium WebDriverException Elem
  • 无法在 Angular 10 中的“pdf-viewer”=>“ng2-pdf-viewer”中显示 blob url

    我有一个 API 它将上传的文件作为 blob 返回 当我尝试绑定时src如果使用 blob URL 则它不会显示任何内容 但是 当我尝试绑定直接 URL 时 它可以显示 PDF 文件 这是我下面给出的代码 我的 TS 代码 downloa
  • Selenium Webdriver - 单击多个下拉菜单时出现陈旧元素异常,而 HTML DOM 不会更改

    我尝试自动化一个场景 其中条件是我必须从下拉列表中选择一个选项 然后它旁边有另一个下拉列表 我必须单击下一个下拉列表中的一个选项才能启用按钮 我尝试使用代码 但它仅单击第一个选项 并显示错误为过时的元素引用 元素未附加到页面文档 请帮忙 如
  • 在 selenium webdriver 中打开一个新窗口而不是新选项卡

    当在我的应用程序中手动单击链接时 它会在 Chrome 和 IE 中的新选项卡中打开 但是 当我的脚本运行时 该链接会在 IE 中的新窗口而不是新选项卡中打开 相同的脚本在 Chrome 中按预期运行 知道如何摆脱这个吗 更改 IE 的默认
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • Spotify Apps API:库类不会返回用户播放列表

    我试图获取一个包含用户库中所有播放列表的数组 http developer spotify com download spotify apps api reference dcdebc652c html 其他类属性 专辑 艺术家 加星标的播
  • 在不使用 Thread.sleep 的情况下单击网页后等待弹出警报

    在网页上单击搜索后 会弹出警报 我需要等到弹出窗口出现 我必须不使用 Thread sleep ExpectedConditions 类具有特定的等待警报弹出窗口的功能 WebDriverWait wait new WebDriverWai
  • 硒脚本

    我想使用 selenium 脚本逐个单击网页上的一堆链接 每次单击都会刷新页面 然而 selenium 不支持像 visited 这样的 css 伪类 所以我无法区分已经点击的和我接下来要点击的 有办法解决我的问题吗 这是我的代码 http
  • 在Wordpress中通过API创建新用户时如何发送电子邮件密码?

    可以使用以下行通过 API 创建新用户 user id wp insert user user data 我想知道如何向新创建的用户发送包含其密码的电子邮件 Wordpress API 中是否有任何函数可以处理这项工作 还是我应该自己创建并
  • Selenium 与 HtmlUnit? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我试图更好地理解测试框架并一直在研究 Selenium 我用过HTMLUnit http htmlun
  • 如何为 ApplicationController 中 after_action 过滤器中的所有操作渲染 json?

    是否可以在 Rails ApplicationController 中创建一个 after filter 方法 该方法在每个操作上运行并呈现为 JSON 我正在构建一个 API 并且希望将控制器中的每个操作的输出呈现为 JSON 客户控制器
  • 使用 Selenium 处理验证码

    我正在尝试自动化一个表单 在表单提交过程中我会得到重新验证码 我陷入困境并弄清楚我们如何使用 selenium webdriver 处理验证码文本 虽然这个验证码正在实时进行图灵测试实施 但是我仍然在寻找某种方法来处理这种情况 所以你不能真

随机推荐