Selenium实战教程----Selenium中的动作

news2024/11/15 8:58:21

Selenium中针对元素进行的动作在代码中可以分为两类:

  • Selenium::WebDriver::ActionBuilder类中的动作方法
  • Selenium::WebDriver::Element类中的动作方法

其中ActionBuilder类中的动作方法比较丰富,基本涵盖了所有可以进行的操作。 而Element类的动作比较少,基本上只有点击和输入等简单的操作。

鼠标操作

鼠标点击

鼠标单击

driver.find_element(:link_text, 'Link1').click

鼠标双击

el = driver.find_element(id: "some_id")
driver.action.double_click(el).perform

鼠标右键

el = driver.find_element(id: "some_id")
driver.action.context_click(el).perform

鼠标拖放

把元素el1拖到元素el2上面

el1 = driver.find_element(id: "some_id1")
el2 = driver.find_element(id: "some_id2")
driver.action.drag_and_drop(el1, el2).perform

还可以按照指定的与某个元素的相对位置来拖放

el = driver.find_element(id: "some_id1")
driver.action.drag_and_drop_by(el, 100, 100).perform

#drag_and_drop_by(source, right_by, down_by)方法有三个参数,source是操作的对象元素,right_bydown_by是移动的控制参数,顾名思义表示向右和向下的偏移。

移动光标

Selenium中提供了两个移动鼠标光标的方法:

  1. 以当前光标位置为基准移动
driver.action.move_by(100, 100).perform

move_by(right_by, down_by) 方法的两个参数也是分别控制移动的偏移量。

  1. 以某个元素为基准移动
el = driver.find_element(id: "some_id")
driver.action.move_to(el).perform #移动到元素el上
driver.action.move_to(el, 100, 100).perform #移动到元素el的右下方(100,100)的位置

键盘操作

键盘输入

键盘上进行的最常用的操作就是输入了。 Selenium中通过send_keys方法来实现

el = driver.find_element(id: "some_id")

#在元素el中输入help
driver.action.send_keys(el, "help").perform

按住和释放按键

有时候需要模拟按住键盘上的各种修饰键的操作,例如按照ctrl键和shift键的动作。

#按住CTRL键
driver.action.key_down(:control).perform
#释放CTRL键
driver.action.key_up(:shift).perform

#在元素el上按住和释放SHIFT键
el = driver.find_element(id: "some_id")
driver.action.key_down(el, :shift).perform
driver.action.key_up(el, :shift).perform

Selenium中定义了键盘上所有按键,可以在Selenium::WebDriver::Keys中查找对应的名称。

清空文本框

在页面操作中有时候需要清空一个输入框中已有的内容,这时候需要用到clear方法。

el = driver.find_element(id: "some_id")
el.clear

需要注意的是,这个操作仅限于在INPUT和TEXTAREA元素上操作,同时也可能无法达到期望的结果,这个时候可以利用键盘的操作CRTL+A(全选)之后再DELETE。

el = driver.find_element(id: "some_id")
el.send_keys([:control, 'a'],:backspace)

窗口操作

处理弹窗

在页面操作中时常要处理弹窗,Selenium中也提供了处理的方法。

alert = driver.switch_to.alert
alert.accept()

切换窗口

在运行自动化测试的过程中,有可能会出现打开了多个窗口的情况,这个时候需要在不同的窗口间切换。

driver = Selenium::WebDriver.for :chrome

driver.get 'http://test.com/windows'
driver.find_element(:id, 'new_window').click

#获取当前所有window对象
windows_array = driver.window_handles

#切换到第一个window
driver.switch_to.window(windows_array.first)

上传文件

上传文件是一个比较独特的用户与浏览器进行交互的场景,和之前的鼠标键盘操作有很大的不同。 在Selenium中,主要是通过send_keys方法向上传文件的入口元素输入文件路径来实现的。这个操作有一个限制就是这个元素的类型必须是input。

driver = Selenium::WebDriver.for :chrome

filename = 'test.txt'
file_path = File.join(Dir.pwd, filename)

driver.get 'http://test.com/upload'
driver.find_element(:tagname, 'input').send_keys file_path

下载文件

下载文件其实并不是由某种动作来实现的,因为界面上触发下载的一般是一个按钮,点击之后触发下载。需要脚本开发者配置的是浏览器对于下载行为的处理,一般是设置一个默认的下载路径,同时设置自动下载不弹窗让用户确认。 下面就以Chrome和firefox上的浏览器配置为例介绍:

Chrome

DOWNLOAD_PATH = "path to store files"
prefs = {:download => {:prompt_for_download => false,
                        :default_directory => DOWNLOAD_PATH
                    },
         }
prefs['profile.default_content_settings.multiple-automatic-downloads'] = 1
driver = Selenium::WebDriver.for :chrome, :prefs => prefs

Firefox

profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.dir'] = DOWNLOAD_PATH
profile['browser.download.folderList'] = 2
profile['browser.helperApps.neverAsk.saveToDisk'] = 'images/jpeg, application/pdf, application/octet-stream'
profile['pdfjs.disabled'] = true

driver = Selenium::WebDriver.for :firefox, profile: profile

这样文件就会自动下载到指定的路径下。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

  全套资料获取方式:点击下方小卡片自行领取即可

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

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

相关文章

ERR_PNPM_JSON_PARSE Unexpected end of JSON input while parsing empty string in

终端报错:  ERR_PNPM_JSON_PARSE  Unexpected end of JSON input while parsing empty string in   报错原因:依赖没有删除干净  解决办法:  ①删除node_modules  ②在package.json的dependencies删除不需要依赖  ③重新pnpm i

干货 | 锁向环到底是什么?是怎么进行倍频的?

你们有没有这样一个疑问,就是CPU的主频怎么做到几个GHz呢? 每一秒要给处理器几亿个脉冲,就拿11代I7处理器来说,它的基本频率就可达2.5GHz,但在我们常规的认知中,频率的大小取决于晶振的频率,比…

速成offer收割机,接口自动化测试面试题,精准打击面试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、我们测试的接口…

虚拟机灾备建设中NFS存储直接访问技术应用

NFS(Network File System)是一种网络文件系统,允许不同计算机之间共享文件和目录。在Linux系统中,可以使用NFS协议来访问网络存储。 当新服务器硬盘不足时,旧的服务器硬盘容量大,不拔硬盘的情况下&#xf…

5VUSB输入双节磷酸铁锂电池串联应用升压充电管理IC-YB5081

5VUSB输入双节磷酸铁锂电池串联应用升压充电管理IC 概要: YB5081是一款5V输入,支持双节磷酸铁锂电池的升压充电管理IC.YB5081集成功率Mos,采用异步开关架构。使其在应用时仅需极少的外圈器件,可有效减少整体方案尺寸,降低BOM成本…

2023年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作…

2023年施工升降机司机(建筑特殊工种)证模拟考试题库及施工升降机司机(建筑特殊工种)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年施工升降机司机(建筑特殊工种)证模拟考试题库及施工升降机司机(建筑特殊工种)理论考试试题是由安全生产模拟考试一点通提供,施工升降机司机(建筑特殊工种)证模拟考试题库是根据施工升降机司机(建筑特…

TS使用echarts柱状图鼠标放上去并弹出

效果 代码 <template><div><Chart style"width: 100%; height: 344px" :option"chartOption" /></div> </template><script lang"ts" setup>import { ref } from vue;import { ToolTipFormatterParams } f…

【论文解读】Parameter-Efficient Transfer Learning for NLP

一. 介绍 1.1 为什么要引入Adapter 在存在许多下游任务的情况下&#xff0c;微调的参数效率很低:每个任务都需要一个全新的模型。作为替代方案&#xff0c;我们建议使用适配器模块进行传输。 1.2 论文目标 目标是建立一个在所有这些方面都表现良好的系统&#xff0c;但不需…

作业收集神器

作业收集系统&#xff0c;这是一个让老师们又爱又恨的存在。爱它&#xff0c;因为可以轻松整理学生作业&#xff0c;掌握他们的学习进度&#xff1b;恨它&#xff0c;因为那一份份纸质作业&#xff0c;总是带来无尽的麻烦和挑战。现在&#xff0c;我要告诉你们一个秘密——如何…

基础算法学习|高精度

高精度 模板 高精度加法 // C A B, A > 0, B > 0 vector<int> add(vector<int> &A, vector<int> &B) {//大的数小的数if (A.size() < B.size()) return add(B, A);vector<int> C;int t 0;for (int i 0; i < A.size(); i )…

网安顶刊IEEE Transactions on Dependable and Secure Computing

安全顶刊论文列表 写在最前面IEEE Transactions on Dependable and Secure ComputingTable of Contents&#xff08;March-April 2023&#xff09;Volume 20, Issue 2Table of Contents&#xff08;Sept.-Oct. 2023&#xff09;Volume 20, Issue 5 写在最前面 为了给自己找论文…

如何解决msvcp120.dll丢失?dll丢失有效的5个解决方法分享

在我日常的计算机使用过程中&#xff0c;我遇到了一个令人困扰的问题——MSVCP120丢失。这个问题不仅影响了我的工作效率&#xff0c;也让我对计算机的安全性产生了疑虑。经过一段时间的研究和解决&#xff0c;我对此问题有了深入的理解&#xff0c;并从中获得了宝贵的经验。 …

【嵌入式C语言】1--内存

1.程序运行为什么需要内存 1.计算机程序运行的目的 计算机为什么需要编程&#xff1f; 程序的目的是为了去运行&#xff0c;程序运行是为了得到一定的结果。计算机就是用来计算的&#xff0c;所有计算机程序其实都是在做计算。计算就是在计算数据&#xff0c;所以计算机程序中…

美摄美颜SDK,提供一站式美颜技术解决方案

数字化时代&#xff0c;图像处理技术已经成为企业提升用户体验&#xff0c;增强产品竞争力的重要工具。其中&#xff0c;美颜技术作为图像处理的重要组成部分&#xff0c;已经广泛应用于各类应用中&#xff0c;如社交软件、直播平台、电商平台等。为了满足企业对于美颜技术的需…

测试用例大全

一、文本框为字符型 必填项非空校验&#xff1a; 必填项未输入&#xff0d;&#xff0d;程序应提示错误&#xff1b; 必填项只输入若干个空格&#xff0c;未输入其它字符&#xff0d;&#xff0d;程序应提示错误&#xff1b; 字段唯一性校验&#xff1a;&#xff08;不是所…

秋叶Lora训练器遇到NaN detected

根据我在网络上的搜索&#xff0c;排除了图片尺寸不到位&#xff08;需要1024*1024&#xff09;、arb没开等等情况。最后发现&#xff0c;是需要在保存格式上&#xff0c;不要选fp16&#xff0c;而是选择bf16. 然后就可以运行了&#xff01;

人类科技之巅,光刻机巨头【阿斯麦股票】在第三季度财报后值得买入吗?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;阿斯麦&#xff08;ASML&#xff09;公布了强劲的第三季度财务业绩&#xff0c;销售额为67亿欧元&#xff0c;每股收益为4.81欧元&#xff0c;同比增长了12%。 &#xff08;2&a…

C语言指针精简版(一)

目录 理解内存、地址与指针之间的挂关系 编址与寻址&#xff08;简单理解&#xff09; 取地址操作符& 解引用操作符* 指针变量的大小 指针变量类型的意义 const修饰指针变量 const修饰变量 const修饰指针变量 指针运算 指针-整数 指针-指针 指针的运算关系 野…

高频行情数据应用解决方案

高频行情数据的因子研发和相关策略&#xff0c;是在当前金融量化投资领域普遍关注的内容。由于高频行情数据量庞大&#xff08;Level1的Tick每日10G&#xff0c;Level2的Tick每日40G&#xff09;、以及高频数据时序化处理复杂、数据访问性能等问题&#xff0c;为研发工作的开展…