Selenium中针对元素进行的动做在代码中能够分为两类:chrome
Selenium::WebDriver::ActionBuilder
类中的动做方法Selenium::WebDriver::Element
类中的动做方法其中ActionBuilder
类中的动做方法比较丰富,基本涵盖了全部能够进行的操做。
而Element
类的动做比较少,基本上只有点击和输入等简单的操做。windows
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
还能够按照指定的与某个元素的相对位置来拖放ruby
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_by
和down_by
是移动的控制参数,顾名思义表示向右和向下的偏移。app
Selenium中提供了两个移动鼠标光标的方法:测试
driver.action.move_by(100, 100).perform
move_by(right_by, down_by)
方法的两个参数也是分别控制移动的偏移量。ui
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
方法来实现spa
el = driver.find_element(id: "some_id") #在元素el中输入help driver.action.send_keys(el, "help").perform
有时候须要模拟按住键盘上的各类修饰键的操做,例如按照ctrl键和shift键的动做。firefox
#按住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
中查找对应的名称。code
在页面操做中有时候须要清空一个输入框中已有的内容,这时候须要用到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上的浏览器配置为例介绍:
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
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
这样文件就会自动下载到指定的路径下。