watir-webdriver模拟鼠标事件

转载自任总的博客,前面还有一部分模拟键盘操作的。但是模拟键盘操作一般都有send_keys去完成,比较简单这里就不转载了。虽然模拟鼠标操作还可以用fire_event但是在最近的watir-webdriver文档中却找不到这个函数的rdoc说明了,难道是今后不支持了?但是目前还是可以用的。

以下内容为转载:

模拟鼠标事件:

在使用过程中,经常遇到模拟鼠标的操作,这个部分其实在watir-webdriver中比较难以完美的实现。有很多方法去比较,比方说如果要模拟鼠标mouseover的情况,可以使用fire_event函数触发该事件,或者使用js方法来调用改事件,还有一个方法就是使用底层的seleneium-webdriver的action方法:

require 'rubygems'
require 'selenium-webdriver'
dr = Selenium::WebDriver.for :firefox
select_file = 'file:///'.concat File.expand_path(File.join(File.dirname(__FILE__), 'fire_event.html'))
dr.navigate.to select_file
 
m = dr.find_element(:css => '.mo')
10.times do
    dr.action.move_to(m).perform
end
  这个一段别人写的方法,这种底层的selenium的Action方法是使用java的ACTION类来模拟鼠标操作,来模拟mouseover事件。
当然你也可以使用ruby调用Win32api来模拟鼠标的移动,不过这种情况下要计算好坐标,我把相关代码贴出来,具体使用的时候,可能还需要计算坐标的位置,和将网页置顶(这种方式不符合自动化测试工具的基本的设计理念,就是多个浏览器并行执行,如果模拟鼠标位置,那么就只能将一个网页置顶,才有效果)
#要求ruby1.8.x
require 'Win32API'

#定义API GetCursorPos和SetCursorPos的接口
get_cursor_pos = Win32API.new("user32","GetCursorPos",['p'],'v')
$set_cursor_pos = Win32API.new("user32","SetCursorPos",['i']*2,'v')

#获取鼠标位置
lpPoint =" " * 8    #初始化存储位置信息的变量
get_cursor_pos.Call(lpPoint)        #调用API
x, y = lpPoint.unpack("LL")        #将传回的参数转换为两个无符号的长整数
puts "当前鼠标的坐标为: #{x}, #{y}"

#设置鼠标位置
def setm(new_xy)
  p new_xy
  $set_cursor_pos.Call(new_xy[0], new_xy[1])
end

100.times{
  setm([rand*800,rand*600])
  sleep 0.01
}
 

猜你喜欢

转载自yxchen51.iteye.com/blog/2054271