博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium实战教程系列(三)--- Selenium中的动作
阅读量:6268 次
发布时间:2019-06-22

本文共 3346 字,大约阅读时间需要 11 分钟。

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中输入helpdriver.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).performdriver.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.alertalert.accept()

切换窗口

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

driver = Selenium::WebDriver.for :chromedriver.get 'http://test.com/windows'driver.find_element(:id, 'new_window').click#获取当前所有window对象windows_array = driver.window_handles#切换到第一个windowdriver.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'] = 1driver = Selenium::WebDriver.for :chrome, :prefs => prefs

Firefox

profile = Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir'] = DOWNLOAD_PATHprofile['browser.download.folderList'] = 2profile['browser.helperApps.neverAsk.saveToDisk'] = 'images/jpeg, application/pdf, application/octet-stream'profile['pdfjs.disabled'] = truedriver = Selenium::WebDriver.for :firefox, profile: profile

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

转载地址:http://vkvpa.baihongyu.com/

你可能感兴趣的文章
python中一切皆对象------类的基础(五)
查看>>
modprobe
查看>>
android中用ExpandableListView实现三级扩展列表
查看>>
%Error opening tftp://255.255.255.255/cisconet.cfg
查看>>
java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
查看>>
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
查看>>
python多线程队列安全
查看>>
[汇编语言学习笔记][第四章第一个程序的编写]
查看>>
android 打开各种文件(setDataAndType)转:
查看>>
补交:最最原始的第一次作业(当时没有选上课,所以不知道)
查看>>
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
软件测试(二)之 Failure, Error & Fault
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
角色权限分配
查看>>