Selenium实战教程系列(三)--- Selenium中的动作

 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 :chromedriver.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 :chromefilename = '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'] = truedriver = Selenium::WebDriver.for :firefox, profile: profile

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

[office] Excel CHITEST 函数 使用实例教程 #媒体#知识分享#其他

Excel CHITEST 函数 使用实例教程 提示 此函数已由 CHISQ.TEST 函数替换,新函数可以提供更好的精确度,其名称更好地反映其用法。旧函数仍可用于与早期版本Excel 的兼容。但是,如果不需要向后兼容,那么应考虑直接使用新函数&…

使用radial-gradient完成弧形凹陷的绘制

1、效果如下图 我在微信小程序中制作的 2、代码如下 <style>.header {position: relative;width: 200px;height: 200px;overflow: hidden;}.header .circle {--circleValue: 500px;position: absolute;bottom: 0;left: 50%;width: 100%;height: var(--circleValue);trans…

ubuntu22.04@laptop OpenCV Get Started: 011_edge_detection

ubuntu22.04laptop OpenCV Get Started: 011_edge_detection 1. 源由2. edge_detection应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 重点逐步分析3.1 GaussianBlur去噪3.2 Sobel边缘检测3.2.1 SobelX方向边缘检测3.2.2 SobelY方向边缘检测3.2.3 SobelXY方向边缘检测 3.3 Canny…

开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)

文章目录 前言源码获取一、认识PDFBox二、导入依赖三、基础功能demo1&#xff1a;读取pdf所有内容demo2&#xff1a;读取所有页内容&#xff08;分页&#xff09;demo3&#xff1a;添加页眉、页脚demo4&#xff1a;添加居中45文字水印demo5&#xff1a;添加图片到右上角 参考文…

IMX6ULL移植U-Boot 2022.04

目录 目录 1.编译环境以及uboot版本 2.默认编译测试 3.uboot中新增自己的开发板 3.编译测试 4.烧录测试 5.patch文件 1.编译环境以及uboot版本 宿主机Debian12u-boot版本lf_v2022.04 ; git 连接GitHub - nxp-imx/uboot-imx: i.MX U-Boot交叉编译工具gcc-arm-10.3-2021.0…

磁盘database数据恢复: ddrescue,dd和Android 设备的数据拷贝

ddrescue和dd 区别&#xff1a; GNU ddrescue 不是 dd 的衍生物&#xff0c;也与 dd 没有任何关系 除了两者都可用于将数据从一台设备复制到另一台设备。 关键的区别在于 ddrescue 使用复杂的算法来复制 来自故障驱动器的数据&#xff0c;尽可能少地造成额外的损坏。ddrescue…

C 语言 devc++ 使用 winsock 实现 windows UDP 局域网发送消息

U参考来源 U 这里移植到windows 上 &#xff0c;使用 devc 开发。 服务端代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <winsock2.h>int main() {WORD sockVersion MAKEWORD(2, 2);WSAD…

2024年【危险化学品经营单位安全管理人员】考试报名及危险化学品经营单位安全管理人员考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试报名是安全生产模拟考试一点通总题库中生成的一套危险化学品经营单位安全管理人员考试资料&#xff0c;安全生产模拟考试一点通上危险化学品经营单位安全管理人员作业手机同步练习…

二叉树相关OJ题

创作不易&#xff0c;感谢三连&#xff01;&#xff01; 一、选择题 1、某二叉树共有 399 个结点&#xff0c;其中有 199 个度为 2 的结点&#xff0c;则该二叉树中的叶子结点数为&#xff08; &#xff09; A.不存在这样的二叉树 B.200 C.198 D.199解析&#xff1a;选B&…

模拟算法总结(Java)

目录 模拟算法概述 练习 练习1&#xff1a;替换所有的问号 练习2&#xff1a;提莫攻击 练习3&#xff1a;Z字形变换 模拟算法概述 模拟&#xff1a;根据题目要求的实现过程进行编程模拟&#xff0c;即题目要求什么就实现什么 解决这类题目&#xff0c;需要&#xff1a; 1…

canal监听binlog记录业务数据的变更;canalAdmin对instance做web配置

概述 平时在开发中会通过logback打印一些开发日志&#xff0c;有时也会需要记录一些业务日志&#xff0c;简单的就直接用log记录一下&#xff0c;但是系统中需要记录日志的地方越来越多时&#xff0c;不能每个地方都写一套log记录&#xff1b; 由于平常用的大多都是mysql&…

做一个AI 红包封面,会火起来吗?

支持文生图 输入图片提示词&#xff0c;即可生成图片。 支持图生图 体验地址 关注公众号&#xff1a;回复红包 &#xff0c;获取体验地址