Selenium自动化(上)

news2024/9/25 13:19:39

Selenium 安装

环境准备

第一种方式

Python 自带的 pip 工具安装。

pip install selenium==4.12.0

安装完成后,查看安装的 Selenium 版本号。

pip show selenium

第二种方式

安装 Selenium 的前提是拥有 Python 开发环境(推荐使用 PyCharm)。Selenium 是 Python 的第三方库,可采用 PyCharm 自带方式安装。

菜单栏 File -> Settings 进入配置界面

搜索 Selenium -> Install Package。(选择4.12.0版本)

Selenium 支持多种浏览器,需要下载对应的浏览器版本的驱动,将浏览器驱动位置设置到环境变量。

各个浏览器驱动下载地址:https://ceshiren.com/t/topic/3275

在 Python 文件中编写代码,如果程序能够调起相应浏览器,说明安装成功。

实战演示

  • 使用 Chrome 浏览器
    # 导入Selenium的webdriver模块
    from selenium import webdriver
    # 创建Chrome浏览器的选项对象,并最大化窗口
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    # 初始化Chrome浏览器驱动
    driver = webdriver.Chrome(options=options)
    # 打开网页
    driver.get('https://www.ceshiren.com')
    # 关闭浏览器
    driver.quit()
    
  • 使用 Firefox 浏览器
    # 导入Selenium的webdriver模块
    from selenium import webdriver
    # 创建Firefox浏览器的选项对象,并最大化窗口
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    # 初始化Firefox浏览器驱动
    driver = webdriver.Chrome(options=options)
    # 打开网页
    driver.get('https://www.ceshiren.com')
    # 关闭浏览器
    driver.quit()
    

这段代码运行后会自动化的创建一个 Chrome 进程。

Selenium Manager 为 Selenium 提供自动化的驱动程序和浏览器管理。Selenium 绑定默认使用此工具,因此无需下载。也无需在代码中添加任何内容或进行其他操作即可使用它。

官网地址:https://www.selenium.dev/documentation/selenium_manager/

自动浏览器管理

Selenium Manager自动检查浏览器驱动是否安装,如果安装正确,则使用此驱动,如果不是,Selenium Manager将管理CfT,无论哪种情况,浏览器最终也会受到管理。

总结:无需手动更新driver。

  • Chrome:基于Chrome for Testing(CfT)从Selenium 4.11.0开始。
  • Firefox:基于公开的Firefox版本,从Selenium 4.12.0开始。

Selenium IDE 是一个浏览器扩展,用于记录和回放用户的操作。

Selenium的集成开发环境(Selenium IDE)是一个易于使用的浏览器扩展,使用现有的 Selenium 命令记录用户在浏览器中的操作,参数由每个元素的上下文定义。它提供了学习 Selenium 语法的绝佳方式。它适用于 Google Chrome、Mozila Firefox和Microsoft Edge。

虽然 Selenium IDE 可以帮我们生成代码、录制回放、元素定位等功能,但是缺点也很明显:

录制回放方式的稳定性和可靠性有限。 只支持 Firefox、Chrome。 对于复杂的页面逻辑其处理能力有限。

使用场景

  • 刚开始入门UI自动化测试
  • 团队代码基础较差
  • 技术成长之后学习价值不高

注意:Selenium IDE 更适合简单的自动化测试任务,对于复杂的测试需求和更高级的自动化任务,需要使用 WebDriver 或其他自动化工具。

环境准备

官网:

https://www.selenium.dev/

Chrome 插件:

https://chrome.google.com/webstore/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd

Firefox 插件:

https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

github release:

https://github.com/SeleniumHQ/selenium-ide/releases

其它版本:

https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/versions/

注意:Chrome插件在国内无法下载,Firefox可以直接下载。

安装完成后,通过在浏览器的菜单栏中点击图标启动。

创建项目

安装完成后,通过在浏览器的菜单栏中点击图标来启动。

如果没看到图标,首先确保是否安装了 Selenium IDE 扩展插件,可以通过点击菜单栏扩展程序按钮,找到并启动 Selenium IDE。 1. 点击 Selenium IDE 图标

![Alt text](assets/image.png){: width="60%"}
  1. 创建一个新项目

  2. 输入项目名称

  3. 进入界面

Selenium IDE常用功能

  1. 新建、保存、打开
  2. 开始和停止录制
  3. 运行8中的所有的实例
  4. 运行单个实例
  5. 调试模式
  6. 调整案例的运行速度
  7. 要录制的网址
  8. 实例列表
  9. 动作、目标、值
  10. 对单条命令的解释
  11. 运行日志

实战演示

录制第一个测试用例
  1. 创建新项目后,取名为 hogwarts_demo1

  2. 点击录制按钮,然后需要填写 URL(要录制测试脚本的网站 URL),这里使用的是 https://ceshiren.com/

  3. 完成设置后,将打开一个新的浏览器窗口,加载 URL 并开始录制脚本。在页面上的操作都将记录在 IDE 中。操作完成后,切换到 IDE 窗口并单击停止录制按钮。 

  4. 停止后,为刚录制的测试用例取名ceshiren_demo1

导出用例结构分析

利用 Selenium IDE 导出 Python pytest 格式代码,导出用例代码如下:

Python 演示代码

#注释是由 Selenium IDE 生成的代码
# Generated by Selenium IDE
#导入可能用到的依赖
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestCeshirendemo1():
  # setup_module()只会在开始测试运行一次
  def setup_method(self, method):
    # 初始化webdriver
    self.driver = webdriver.Chrome()
    self.vars = {}

  # teardown_module()只会在结束测试运行一次
  def teardown_method(self, method):
    # 关闭浏览器并关闭启动 ChromeDriver 时启动的 ChromeDriver 可执行文件
    self.driver.quit()

  # 测试方法
  def test_ceshirendemo1(self):
    # 访问网址
    self.driver.get("https://ceshiren.com/")
    # 设置窗口大小
    self.driver.set_window_size(1382, 744)
    # 点击操作
    self.driver.find_element(By.LINK_TEXT, "类别").click()
    # 设置等待时间为2秒
    time.sleep(2)
    # 关闭当前窗口
    self.driver.close()

这段代码就简单的实现了对浏览器操作的自动化。

保存

单击 IDE 右上角的 save 图标,输入项目的保存名称和地址。

回放

选择想要回放的测试用例,单击 play 按钮,在 IDE 中回放测试。

控件定位

如果想定位其他的控件,只需要点击图中的箭头,点击后就会跳转到浏览器,然后点击想要定位的控件,Target 的值就会出现相应的定位表达式(见图3-8)。

Web 浏览器控制

简介

在 Web 自动化测试中,经常需要模拟用户在浏览器中的操作来完成一些测试任务,通过编程方式操作和控制浏览器的行为,以便自动化执行各种操作。例如: - 打开网页 - 刷新 - 回退 - 最大化 - 最小化

浏览器控制

  • 模拟功能测试中对浏览器的操作 | | 操作 | 使用场景 | | --- | --- | --- | | get | 打开浏览器 | web 自动化测试第一步 | | refresh | 浏览器刷新 | 模拟浏览器刷新 | | back | 浏览器退回 | 模拟退回步骤 | | maximize_window | 最大化浏览器 | 模拟浏览器最大化 | | minimize_window | 最小化浏览器 | 模拟浏览器最小化 |
打开网页
  • get() 方法打开浏览器
    # 导入Selenium的webdriver模块
    from selenium import webdriver
    
    def window_start():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        window_start()
    
刷新页面
  • refresh() 方法刷新页面
    # 导入Selenium的webdriver模块
    import time
    
    from selenium import webdriver
    
    def window_refresh():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 等待1秒
        time.sleep(1)
        # 刷新页面
        driver.refresh()
        time.sleep(1)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        window_refresh()
    
回退
  • 用 back() 方法回退到上一个界面
    # 导入Selenium的webdriver模块
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    
    def window_back():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        driver.find_element(By.XPATH,"//*[text()='类别']").click()
        time.sleep(1)
        driver.back()
        time.sleep(1)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        window_back()
    
最大化
  • maximize_window() 方法使窗口最大化
    import time
    
    from selenium import webdriver
    
    def max_window():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 窗口最大化
        driver.maximize_window()
        time.sleep(3)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        max_window()
    
最小化
  • minimize_window() 方法使窗口最小化
    import time
    
    from selenium import webdriver
    
    def min_window():
        # 创建Chrome浏览器的选项对象
        options = webdriver.ChromeOptions()
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        # 窗口最小化
        driver.minimize_window()
        time.sleep(2)
        # 窗口最大化
        driver.maximize_window()
        time.sleep(3)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        min_window()
    
设置浏览器宽和高
  • set_window_size(宽, 高):设置浏览器的宽和高。
    import time
    
    from selenium import webdriver
    
    def set_window_size():
        # 创建Chrome浏览器的选项对象,并最大化窗口
        options = webdriver.ChromeOptions()
        options.add_argument("--start-maximized")
        # 初始化Chrome浏览器驱动
        driver = webdriver.Chrome(options=options)
        # 打开网页
        driver.get('https://www.ceshiren.com')
        driver.set_window_size(500,500)
        time.sleep(2)
        # 关闭浏览器
        driver.quit()
    
    if __name__ == '__main__':
        set_window_size()
    

总结

  • get():打开浏览器。
  • refresh():刷新浏览器。
  • back():回退到上一个页面。
  • maximize_window():浏览器窗口最大化。
  • minimize_window():浏览器窗口最小化。
  • set_window_size(宽, 高):设置浏览器的宽和高。

常见控件定位方法

简介

在 Web 自动化测试中,定位是指在进行测试过程中定位网页上的元素(如按钮、文本框、下拉菜单等),以便进行操作。定位是自动化测试中的关键步骤,它使测试工具能够找到并与页面上的元素进行交互。

为什么要学习定位

  • 自动化测试必需:在自动化测试中,测试脚本需要与页面上的元素进行交互,如点击按钮、输入文本等。
  • 元素可能随时间改变:Web 页面的结构可能会随时更改,例如元素的 ID、Class Name等可能会变化。掌握不同的定位方式可以在元素属性变化时,灵活地修改测试脚本而不影响稳定性。
  • 提高测试脚本的可维护性:如果只依赖一种定位方式,当页面结构发生变化时,测试脚本可能会失效。多掌握定位方式可以根据情况选择最合适的定位方式,提高脚本的可维护性。

Selenium 八大定位方式

Selenium提供了八种定位方式 https://www.selenium.dev/documentation/webdriver/elements/locators/

定位方式描述
class nameclass属性对应的值
css selector(重点)css表达式
id(重点)id属性对应的值
name(重点)name属性对应的值
link test查找其可见文本与搜索值匹配的锚元素
partial link test查找其可见文本包含搜索值的锚元素。如果多个元素匹配,则只会选择第一个元素
tag name标签名称
xpath(重点)xpath表达式
  • 格式 - driver.find_element_by_定位方式(定位元素)

    driver.find_element_by_id("su")
    
    driver.find_element(By.定位方式, 定位元素)官方建议
    driver.find_element(By.ID, "su")
    

    创建定位器

    要使用Selenium在网页上操作网页元素,需要找到它们在网页上的位置。Selenium提供了上述提到的方式,通过这些方式可以在页面上定位元素。为了理解和创建定位器,我们将使用以下HTML代码片段。

<html>
<body>
<style>
.information {
  background-color: white;
  color: black;
  padding: 10px;
}
</style>
<h2>Contact Selenium</h2>

<form action="/action_page.php">
  <input type="radio" name="gender" value="m" />Male &nbsp;
  <input type="radio" name="gender" value="f" />Female <br>
  <br>
  <label for="fname">First name:</label><br>
  <input class="information" type="text" id="fname" name="fname" value="Jane"><br><br>
  <label for="lname">Last name:</label><br>
  <input class="information" type="text" id="lname" name="lname" value="Doe"><br><br>
  <label for="newsletter">Newsletter:</label>
  <input type="checkbox" name="newsletter" value="1" /><br><br>
  <input type="submit" value="Submit">
</form> 

<p>To know more about Selenium, visit the official page 
<a href ="www.selenium.dev">Selenium Official Page</a> 
</p>

</body>
</html>
class name

HTML 页面的元素可以具有class属性,可以通过使用Selenium中提供的class name 来识别这些元素。

driver.find_element(By.CLASS_NAME, "information")
css selector

CSS是用于给HTML页面添加样式的语言。通过使用CSS选择器定位策略来识别页面上的元素。如果元素有一个ID,优先选择使用 id 进行定位,将定位器创建为css = #id。否则,遵循的格式是css =[attribute=value]。使用CSS来创建“名字(First Name)”文本框的定位器。

driver.find_element(By.CSS_SELECTOR, "#fname")
id

通过使用网页上元素的ID属性来定位它。通常情况下,元素的ID属性在网页上应该是唯一的。使用 id 来识别“姓氏(Last Name)”字段。

driver.find_element(By.ID, "lname")
name

通过使用网页上元素的NAME属性来定位。通常情况下,元素的NAME属性在网页上应该是唯一的。通过使用 name 来识别“新闻简讯(Newsletter)”复选框。

driver.find_element(By.NAME, "newsletter")

如果想要定位的元素是一个链接,可以使用链接文本定位器来在网页上识别它。链接文本是链接显示的文本内容。通过使用 link test 来定位 Selenium Official Page 这个链接。

driver.find_element(By.LINK_TEXT, "Selenium Official Page")

如果想要定位的元素是一个链接,可以使用部分链接文本定位器来在网页上识别它。链接文本是链接显示的文本内容。可以传递部分文本作为值。通过使用 partial link test来定位 Selenium Official Page 这个链接。

driver.find_element(By.PARTIAL_LINK_TEXT, "Official Page")
tag name

可以使用HTML标签本身作为定位器,在页面上识别网页元素。通过使用 tag name, HTML标签“a”来识别链接。

driver.find_element(By.TAG_NAME, "a")
xpath

一个HTML文档可以被视为一个XML文档,可以通过使用XPath来定位感兴趣的元素,它是到达目标元素的路径。XPath可以是绝对XPath,它是从文档的根创建的。例如 - /html/form/input[1]。这将返回男性单选按钮。或者XPath可以是相对的。例如 - //input[@name='fname']。这将返回名字文本框。让我们使用XPath来创建定位器,以定位女性单选按钮。

driver.find_element(By.XPATH, "//input[@value='f']")

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

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

相关文章

【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建

文章目录 一. kafka kraft 集群介绍1. KRaft架构2. Controller 服务器3. Process Roles4. Quorum Voters5. kraft的工作原理 ing 二. 集群安装1. 安装1.1. 配置1.2. 格式化 2. 启动测试2.1. 启功节点服务2.2. 测试 本文主要介绍了 kafka raft集群架构&#xff1a; 与旧架构的不…

linux(centos7)离线安装mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar

1. 卸载mariadb相关rpm # 查找 rpm -qa|grep mariadb rpm -qa|grep mysql# 卸载 rpm -e --nodeps mariadb... rpm -e --nodeps mysql...2. 删除mysql相关文件 # 查找 find / -name mysql# 删除 rm -rf /var/lib/mysql...3. 查看是否有相关依赖&#xff0c;没有需安装 rpm -q…

联想王传东:AI PC迈入AI Ready 即将开启AI On

“AI PC已经正式迈入AI Ready 阶段&#xff0c;接下来会逐渐进入到AI On阶段。”12月16日&#xff0c;英特尔人工智能创新应用大赛启动仪式在深圳举办。作为独家AI PC合作伙伴&#xff0c;联想集团副总裁、中国区首席市场官王传东代表公司出席仪式并致辞。 王传东认为AI PC的发…

云渲染视频多少钱呢?视频云渲染哪个平台好?

对于想要渲染高质量视频或动画电影的人来说&#xff0c;使用个人电脑来完成这样的任务往往是一个耗时且效率低下的过程&#xff0c;可能需要耗费数日甚至数周的时间。幸运的是&#xff0c;我们可以将这一任务外包至云渲染平台&#xff0c;它们拥有强大的计算资源&#xff0c;可…

BIM 技术:角色漫游

本心、输入输出、结果 文章目录 BIM 技术&#xff1a;角色漫游前言BIM角色漫游中&#xff0c;用户如何与建筑模型进行交互手势识别技术在BIM角色漫游中的应用有哪些图示花有重开日&#xff0c;人无再少年实践是检验真理的唯一标准 BIM 技术&#xff1a;角色漫游 编辑&#xff1…

TensortRT:sample.py:DeprecationWarning:

错误描述 sample.py:112: DeprecationWarning: Use set_memory_pool_limit instead. config.max_workspace_size common.GiB(1) sample.py:75: DeprecationWarning: Use add_convolution_nd instead. conv1 network.add_convolution( sample.py:78: DeprecationWarning: Use…

【C++11特性篇】C++11中新增的initializer_list——初始化的小利器

前言 大家好吖&#xff0c;欢迎来到 YY 滴C11系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.探究std::initializer_list是什么…

HI3559AV100和FPGA 7K690T的PCIE接口调试记录

1、基本情况 HI3559AV100和690t之间使用pcie2.0 x2接口连接&#xff0c;3559作为RC端&#xff0c;690T作为EP端&#xff0c;驱动使用XDMA。系统主要功能是FPGA采集srio接口过来的图像数据&#xff0c;再通过pcie把数据传递给3559&#xff0c;3559再实现图像数据的存储、AI处理、…

深度学习 动态交叉验证v1.0

# 执行特征工程&#xff08;交叉验证&#xff09; def perform_feature_engineering(df, features):# 根据 features 中的内容选择特征生成函数if typical_ma in features:df calculate_typical_ma(df, window10)if RSI in features:df calculate_rsi(df, column_nameClose, …

【C++11特性篇】利用 { } 初始化(1)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.回顾C98标准中{}的使用二.一切皆可用…

新钛云服助力爱达邮轮·魔都号首航,保驾护航,共创辉煌

随着2024年1月1日的临近&#xff0c;中国首艘国产大型邮轮——爱达邮轮魔都号即将迎来激动人心的首航时刻。作为爱达邮轮的IT系统运维和安全服务伙伴&#xff0c;新钛云服有幸提前登船体验&#xff0c;并为魔都号即将到来的航行提供全面的技术支持与保障。 爱达魔都号&#xff…

代驾系统开发:驶向未来的智能交通服务

随着科技的迅速发展&#xff0c;代驾系统的开发成为改善出行体验和提升交通服务智能化的重要一环。本文将聚焦于代驾系统开发的技术创新&#xff0c;为读者呈现其中涉及的一些令人振奋的技术代码。 1. 区块链技术的运用&#xff1a; 区块链技术被引入代驾系统&#xff0c;可…

网站监控/定时任务/网站网址URL状态监控神器

源码介绍&#xff1a; 这是一款在线监控网址的源码&#xff0c;对于有多个网站的站长来说还是非常有用的。也可以做为一项收费服务对外提供。这个程序没啥问题&#xff0c;就是UI有点简单&#xff0c;不影响使用。 网站监控/定时任务/网站网址URL状态监控神器&#xff0c;可以…

MFC逆向之CrackMe Level3 过反调试 + 写注册机

今天我来分享一下,过反调试的方法以及使用IDA还原代码 写注册机的过程 由于内容太多,我准备分为两个帖子写,这个帖子主要是写IDA还原代码,下一个帖子是写反调试的分析以及过反调试和异常 这个CrackMe Level3是一个朋友发我的,我也不知道他在哪里弄的,我感觉挺好玩的,对反调试…

Spark RDD、DataFrame、DataSet比较

在Spark的学习当中&#xff0c;RDD、DataFrame、DataSet可以说都是需要着重理解的专业名词概念。尤其是在涉及到数据结构的部分&#xff0c;理解清楚这三者的共性与区别&#xff0c;非常有必要。 RDD&#xff0c;作为Spark的核心数据抽象&#xff0c;是Spark当中不可或缺的存在…

【华为数据之道学习笔记】5-4 数据入湖方式

数据入湖遵循华为信息架构&#xff0c;以逻辑数据实体为粒度入湖&#xff0c;逻辑数据实体在首次入湖时应该考虑信息的完整性。原则上&#xff0c;一个逻辑数据实体的所有属性应该一次性进湖&#xff0c;避免一个逻辑实体多次入湖&#xff0c;增加入湖工作量。 数据入湖的方式…

Codeforces Round 914 (Div. 2) A~E

A.Forked!&#xff08;思维&#xff09; 题意&#xff1a; 给出骑士的跳跃能力 ( x , y ) (x, y) (x,y) 以及国王和皇后的位置&#xff0c;问有多少个位置可以让骑士可以直接攻击到国王和皇后。 分析&#xff1a; 棋盘非常大 ( 1 0 8 1 0 8 ) (10^{8} \times 10^{8}) (1…

基于ssm物流管理系统论文

摘 要 本物流管理系统设计目标是实现物流的信息化管理&#xff0c;提高管理效率&#xff0c;使得物流管理作规范化、科学化、高效化。 本文重点阐述了物流管理系统的开发过程&#xff0c;以实际运用为开发背景&#xff0c;基于SSM框架&#xff0c;运用了Java编程语言和MYSQL数…

C++:命名空间

从今天正式开始对C的学习&#xff0c;这里只学习C对C的拓展&#xff0c;和C相同的部分在C语言专栏中都可以找到&#xff0c;我们先看一段C代码 #include<iostream> using namespace std; int main() {cout<<"hello world<<endl;return 0; } 同样也是打…

【Proteus仿真】【51单片机】电子门铃设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使共阴数码管&#xff0c;按键、无源蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;数码管默认显示第一种门铃音调&#xff0c;可通过K1键切…