深入理解Selenium:常用方法和操作详解

前言

大家好,我是chowley,今天来复习一下Selenium的常用方法,并结合实战演练来加深记忆。

Selenium

Selenium 是软件测试领域中最受欢迎的自动化测试工具之一,它提供了丰富的方法和操作来模拟用户在 Web 应用程序中的交互行为。本篇博客将深入介绍 Selenium 中常用的方法和操作,帮助软件测试读者更好地利用 Selenium 进行自动化测试。

定位元素

Selenium 提供了多种方法来定位 Web 页面中的元素,包括通过 ID、名称、XPath 表达式、CSS 选择器等。

  • find_element_by_id(id):通过元素 ID 定位元素。
  • find_element_by_name(name):通过元素名称定位元素。
  • find_element_by_xpath(xpath):通过 XPath 表达式定位元素。
  • find_element_by_css_selector(css_selector):通过 CSS 选择器定位元素。
  • find_element_by_class_name(class_name):通过类名定位元素。
  • find_element_by_tag_name(tag_name):通过标签名定位元素。

元素操作

了解如何使用 Selenium 对定位到的元素进行操作是自动化测试的关键。

  • click():单击元素。
  • send_keys(keys):向元素发送键盘输入。
  • clear():清除元素的文本内容。
  • text:获取元素的文本内容。
  • get_attribute(attribute_name):获取元素的指定属性值。

浏览器操作

除了操作页面上的元素,Selenium 还提供了丰富的浏览器操作方法,如打开 URL、返回上一个页面、刷新页面等。

  • get(url):打开指定 URL。
  • back():返回上一个页面。
  • forward():前进到下一个页面。
  • refresh():刷新当前页面。
  • maximize_window():最大化浏览器窗口。
  • quit():关闭浏览器。

等待操作

在自动化测试中,等待是一个非常重要的概念,它可以帮助我们等待页面加载完成、元素可见、元素可点击等条件。

  • implicitly_wait(seconds):隐式等待,等待指定的时间,直到元素出现。
  • explicitly_wait(seconds):显式等待,等待直到满足指定条件。
  • sleep(seconds):线程休眠指定的时间。

其他

  • switch_to.frame(frame_reference):切换到指定的 iframe。
  • switch_to.alert():处理弹窗。
  • get_cookies():获取当前页面的 cookies。
  • execute_script(script):执行 JavaScript 脚本。

实战演练

下面让我们来设计一个实际的场景:假设我们要进行一个简单的登录页面测试。测试步骤包括打开登录页面、输入用户名和密码、单击登录按钮,并验证登录是否成功。

首先,我们需要在测试环境中准备一个简单的登录页面。接下来,我们将使用 Selenium 和 Python 编写一个自动化测试脚本,来完成这个测试任务。

步骤一:准备测试环境

确保您已经安装了 Python 和 PyCharm,并配置好了 Selenium WebDriver for Python。

步骤二:编写测试脚本
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time# 设置 Chrome WebDriver 的路径(请根据自己的实际情况修改)
chrome_driver_path = "path_to_chromedriver"# 创建一个 Chrome WebDriver 实例
driver = webdriver.Chrome(chrome_driver_path)# 打开登录页面
driver.get("https://example.com/login")# 输入用户名和密码
username_input = driver.find_element_by_id("username")
password_input = driver.find_element_by_id("password")
username_input.send_keys("your_username")
password_input.send_keys("your_password")# 单击登录按钮
login_button = driver.find_element_by_id("login-button")
login_button.click()# 等待一段时间,等待页面加载完成
time.sleep(3)# 验证登录是否成功
welcome_message = driver.find_element_by_css_selector(".welcome-message").text
if "Welcome" in welcome_message:print("登录成功!")
else:print("登录失败,请检查用户名和密码!")# 关闭浏览器
driver.quit()

请确保将 path_to_chromedriver 替换为您本地 Chrome WebDriver 的实际路径,并将 "your_username""your_password" 替换为实际的用户名和密码。

步骤三:运行测试脚本

右键单击 Python 文件,选择 "Run" -> "Run 'filename'",等待测试脚本执行完成。

结果验证

测试脚本将自动打开登录页面,在用户名和密码输入框中输入指定的用户名和密码,然后单击登录按钮。最后,脚本将验证是否成功登录,并在控制台输出相应的结果。

总结

通过本篇博客的学习,读者将能够深入理解 Selenium 中常用的方法和操作,并掌握如何使用这些方法来构建稳健的自动化测试脚本。希望本文能够帮助软件测试读者更加轻松地应对日常的自动化测试工作,提高测试效率和质量。

好了,以上就是本文的全部内容,如有问题欢迎留言讨论。

本人正在组建测试开发方向的交流社区,如果您对软件质量管理方面感兴趣,欢迎私信我了解。

我是chowley,一个专注互联网技术和软件质量保障领域的博主,我们下次再见!

欢迎点赞、评论、收藏,it's important for me.

欢迎点赞、评论、收藏,it's important for me.

欢迎点赞、评论、收藏,it's important for me.

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

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

相关文章

OpenAI发布首个视频生成模型Sora:输文字即可出视频现实还存在吗?

就在刚刚,openai发布了全新的视频生成人工智能模型Sora。用户只要通过文字输入一些提示语,就可以得到一个高清视频。同时Sora还可以根据静态图像生成相关的视频剪辑,效果相当炸裂。 这下又要干倒一大片创业公司了 Sora官方网址 Sora 目前…

codeforces round 926 div2(A-D)

1.A a题 ∑ i 2 n ( a i − a i − 1 ) \sum_{i2}^{n}(a_{i}-a_{i-1}) ∑i2n​(ai​−ai−1​) a n − a 1 a_{n}-a_{1} an​−a1​所以我们排一下序输出 a n − a 1 a_{n}-a_{1} an​−a1​即可,当然直接累加也可以 #include<bits/stdc.h> using namespace std; #def…

【矩阵】重塑矩阵

每日一道算法题之重塑矩阵 一、题目描述二、思路三、C代码 一、题目描述 题目来源&#xff1a;LeetCode 在 MATLAB 中&#xff0c;有一个非常有用的函数 reshape &#xff0c;它可以将一个 m x n 矩阵重塑为另一个大小不同&#xff08;p x q&#xff09;的新矩阵&#xff0c;但…

(三十九)大数据实战——Prometheus监控平台的部署搭建

前言 Prometheus监控&#xff08;Prometheus Monitoring&#xff09;是一种开源的系统监控和警报工具。它最初由SoundCloud开发并于2012年发布&#xff0c;并在2016年加入了云原生计算基金会&#xff08;CNCF&#xff09;。Prometheus监控旨在收集、存储和查询各种指标数据&am…

17.3.2.7 二值化(内存处理)

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 二值化的算法请参看第17.3.1.5节。17.3.1.5 二值化&#xff08;黑白&#xff09;-CSDN博客 【例 17.48】二值化算法一。 //黑白1pr…

GEE使用 Sentinel-1 SAR影像 和 Otsu 方法绘制洪水地图

洪水是世界上最常见、破坏性最大的自然灾害之一,造成了巨大的生命和财产损失。此外,随着气候变化的影响,近年来,洪灾变得更加频繁和不可预测。为了最大限度地减少生命和财产损失,必须迅速发现洪水蔓延的情况,并及时采取必要的干预措施。洪水蔓延探测大多使用光学传感器或…

C++参悟:内存管理 shared_ptr

内存管理 shared_ptr 一、概述二、成员函数1. 构造函数2. 析构函数3. 修改器1. reset2. swap 4. 观察器1. get2. use_count3. operator bool 一、概述 std::shared_ptr 是通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可占有同一对象。下列情况之一出现时销毁对…

大模型基础架构入门

大模型架构 Prefix Decoder 和 Causal Decoder 和 Encoder-Decoder 区别 在于 attention mask不同&#xff1a; https://zhuanlan.zhihu.com/p/626310493 为何现在的大模型大部分是Decoder only结构&#xff1f; https://www.zhihu.com/question/588325646/answer/335725261…

代码随想录算法训练营第四十四天 | 518. 零钱兑换 II、377. 组合总和 Ⅳ

题目链接&#xff1a;518. 零钱兑换 II 文章讲解&#xff1a;代码随想录 518. 零钱兑换 II讲解 视频讲解&#xff1a;装满背包有多少种方法&#xff1f;组合与排列有讲究&#xff01;| LeetCode&#xff1a;518.零钱兑换II 思路和解法 题目&#xff1a; 给你一个整数数组 c…

JVM-JVM中对象的结构

对象内存布局 对象里的三个区&#xff1a; 对象头&#xff08;Header&#xff09;&#xff1a;Java对象头占8byte。如果是数组则占12byte。因为JVM里数组size需要使用4byte存储。 标记字段MarkWord&#xff1a; 用于存储对象自身的运行时数据&#xff0c;它是synchronized实现轻…

STM32——OLED菜单

文章目录 一.补充二. 二级菜单代码 简介&#xff1a;首先在我的51 I2C里面有OLED详细讲解&#xff0c;本期代码从51OLED基础上移植过来的&#xff0c;可以先看完那篇文章&#xff0c;在看这个&#xff0c;然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时…

[2024]常用的conda指令

[2024]常用的conda指令 Hi&#xff0c;各位新年好&#xff0c;今天给大家介绍一下Python项目开发中常用的工具-Anaconda。 Anaconda指的是一个开源的Python发行版本&#xff0c;也是一个安装、管理Python相关包的软件。它自带了Python、Jupyter Notebook、Spyder等工具&#x…

MIPS指令集处理器设计(支持64条汇编指令)

一、题目背景和意义 二、国内外研究现状 (略) 三、MIPS指令集处理器设计与实现 (一).MIPS指令集功能性梳理 1.MIPS指令集架构 (1).mips基础指令集格式总结 MIPS是&#xff08;Microcomputer without interlocked pipeline stages&#xff09;[10]的缩写&#xff0c;含义是…

C++友元->全局函数做友元、类做友元、成员函数做友元

全局函数做友元代码&#xff1a; #include<iostream> using namespace std; #include<string> //建筑物类 class Building { //告诉编译器 goodGay全局函数 是 Building类的好朋友&#xff0c;可以访问类中的私有内容 friend void goodGay(Building * bu…

第14讲投票帖子详情实现

投票帖子详情实现 后端,根据id查询投票帖子信息&#xff1a; /*** 根据id查询* param id* return*/ GetMapping("/{id}") public R findById(PathVariable(value "id")Integer id){Vote vote voteService.getById(id);WxUserInfo wxUserInfo wxUserInf…

电商+支付双系统项目------设计数据库

这篇文章将详细介绍电商支付双系统项目的数据库设计。数据库在该项目中扮演着至关重要的角色&#xff0c;它负责存储和管理用户信息、商品数据、订单记录以及支付交易等关键数据。通过精心设计和优化数据库结构&#xff0c;可以实现高效的数据存储和检索&#xff0c;确保系统的…

JavaScript中的常见算法

一.排序算法 1.冒泡排序 冒泡排序比较所有相邻的两个项&#xff0c;如果第一个比第二个大&#xff0c;则交换它们。元素项向上移动至 正确的顺序&#xff0c;就好像气泡升至表面一样。 function bubbleSort(arr) {const { length } arrfor (let i 0; i < length - 1; i)…

详解自定义类型:枚举与联合体!

目录 ​编辑 一、枚举类型 1.枚举类型的声明 2.枚举类型的优点 3.枚举类型的使用 二、联合体类型(共用体&#xff09; 1.联合体类型的声明 2.联合体的特点 3.相同成员的结构体和联合体的对比 4.联合体大小的计算 5.用联合体判断大小端 三.完结散花 悟已往之不谏&…

【Webpack】自动执行开发服务器 devServer

开发服务器&自动化 每次写完代码都需要手动输入指令才能编译代码&#xff0c;太麻烦了&#xff0c;我们希望一切自动化&#xff0c;即修改代码后服务器浏览器自动刷新。 1. 下载包 npm i webpack-dev-server -D2. 配置 webpack.config.js const path require("p…

深入浅出了解谷歌「Gemini大模型」发展历程

Google在2023年12月官宣了Gemini模型&#xff0c;随后2024年2月9日才宣布Gemini 1.0 Ultra正式对公众服务&#xff0c;并且开始收费。现在2024年2月14日就宣布了Gemini 1.5 Pro&#xff0c;史诗级多模态最强MoE首破100万极限上下文纪录&#xff01;&#xff01;&#xff01;Gem…