最近在用watir作一个自动化脚本。我使用的浏览器是IE8,因为产品需要支持IE8 。由于发现ruby187+watir1.5.5 并不支持IE8的一些功能,所以升级到ruby193+watir 1.6.5。然后在我尝试用浏览器上传文件的时候,watir自带的方法还是没法很好的自动化该步。我用的是@browser.file_field(:name,"file").set($FILE_PATH)方法,会卡在如下的页面没法继续。但是用ruby187+watir1.5.5+IE6的话,用这个方法就能很稳定的通过。
所以我查找了一下watir的代码,最后发现这个file_field的set方法是定义在 D:\Ruby193\lib\ruby\gems\1.9.1\gems\watir-1.6.5\lib\watir\input_elements.rb中的。
class FileField < InputElement
INPUT_TYPES = ["file"]
POPUP_TITLES = ['Choose file', 'Choose File to Upload']
# set the file location in the Choose file dialog in a new process
# will raise a Watir Exception if AutoIt is not correctly installed
def set(path_to_file)
assert_exists
require 'watir/windowhelper'
WindowHelper.check_autoit_installed
begin
Thread.new do
sleep 1 # it takes some time for popup to appear
system %{rubyw -e '
require "win32ole"
@autoit = WIN32OLE.new("AutoItX3.Control")
time = Time.now
while (Time.now - time) < 15 # the loop will wait up to 15 seconds for popup to appear
#{POPUP_TITLES.inspect}.each do |popup_title|
next unless @autoit.WinWait(popup_title, "", 1) == 1
@autoit.ControlSetText(popup_title, "", "Edit1", #{path_to_file.inspect})
@autoit.ControlSend(popup_title, "", "Button2", "{ENTER}")
exit
end # each
end # while
'}
end.join(1)
rescue
raise Watir::Exception::WatirException, "Problem accessing Choose file dialog"
end
click
end
end
上面是watir 1.6.5 的代码,可以看到他是有考虑到IE8窗口title为'Choose File to Upload'的情况,IE6这个窗口的title是'Choose file'。但是运行仍然失败,可能是多线程时间上的一些原因。我尝试着做了一些修改,现在能稳定地支持IE8了,因为我只需要它支持IE8 ,所以没有考虑IE6 窗口title为'Choose file'的情况。我修改的代码如下
class FileField < InputElement
INPUT_TYPES = ["file"]
# set the file location in the Choose file dialog in a new process
# will raise a Watir Exception if AutoIt is not correctly installed
# This method has been restore back to 187 code by Wren. It's not 193 code.
def set(path_to_file)
assert_exists
require 'watir/windowhelper'
WindowHelper.check_autoit_installed
begin
Thread.new do
#sleep 1 # it takes some time for popup to appear
system %{rubyw -e '
require "win32ole"
@autoit = WIN32OLE.new("AutoItX3.Control")
popup_title="Choose File to Upload" # IE 8
if @autoit.WinWait(popup_title, "", 5) == 1
@autoit.ControlSetText(popup_title, "", "Edit1", #{path_to_file.inspect})
@autoit.ControlSend(popup_title, "", "Button2", "{ENTER}")
end # if
'}
end.join(1)
rescue
raise Watir::Exception::WatirException, "Problem accessing Choose file dialog"
end
click
end
end
小结,没有研究出之前watir代码不成功的原因,只是通过尝试,试出了一种比较稳定的代码替换之。以后对线程这块还要多学习。另外,直接修改本地watir的源代码非常不妥,应该把这个方法在我的项目代码里重新定义一遍比较安全。希望能给遇到同样问题的朋友一点帮助,同时也期待专家指点一下,为何原来的那段代码会卡在我截图的页面无法前进。
2013年1月2号,追加:
关于这篇文章后来我又有了新的认识,当时我用的是watir 1.6.5 版本,对IE8的支持还不是特别稳定。现在watir最新的版本是4.0.n了,而且watir库分为watir-classic和watir-webdriver。watir-classic貌似是继承了老的watir模式,其中的这个file_field的set方法已经重构过了,而且非常稳定的支持了IE8。现在准备尝试将过去的测试脚本升级到4.0的watir-classic,目前发现比较棘手的问题是watir-classic非常不稳定,远不如1.6.5,比如点一个按钮导致页面跳转后,它不会自动等待新页面load结束,而直接运行下一句,需要自己手动添加很多等待判断才能稳定执行。还不知道为什么会这样
- 大小: 89.4 KB
分享到:
相关推荐
**Ruby Watir** 是一种用于网页自动化测试的工具库,它能够模拟用户在浏览器中的操作行为,如点击按钮、填写表单等,非常适合进行功能测试、回归测试和系统测试。 #### 二、安装Ruby Watir ##### 1. 安装Ruby环境 ...
同时,因为Watir是Ruby库的一部分,它具有强大的编程能力,可以连接数据库、读取数据文件、导出XML、构建可重用的代码库,以及其他你能想到的各种功能。不同于一些商业工具的专有脚本语言,Watir的代码简洁、优雅且...
Watir(Web Application Testing In Ruby)是一个用于Web应用程序测试的Ruby库。它提供了一种简单且强大的方法来模拟用户与Web页面的交互行为,进而实现Web应用的功能自动化测试。通过Watir,测试人员可以编写易于...
### Ruby 和 Watir 的安装指南 #### 背景与问题描述 在尝试安装 Watir 时遇到问题,尤其是在服务器 2003 上。主要问题是 Watir 的依赖包 `activesupport` 需要 Ruby 版本 >= 1.8.7,而当前系统上安装的是 Ruby ...
Watir(Web Application Testing in Ruby)是Ruby社区开发的一个开源库,它允许我们用Ruby来编写浏览器自动化测试,支持多种主流浏览器,如Chrome、Firefox、Safari等。 标题中的“test_logger1.rar_Logger wat_...
Watir,是Ruby的一个库,它允许通过编写Ruby代码来控制浏览器,进行端到端的Web应用测试。 ### Ruby安装 首先,我们需要在本地环境中安装Ruby。这可以通过Ruby安装器RVM(Ruby Version Manager)或RBEnv来完成。...
ruby+watir技术实现的论坛发帖机器人,不完善。
8. **异常处理**:在编写测试脚本时,要考虑到可能出现的错误情况,使用Ruby的异常处理机制(如`begin-rescue-end`)捕获并处理异常,确保测试的稳定性和可靠性。 9. **持续集成**:为了实现持续集成,你可以将...
Ruby on Watir 是一个强大的自动化测试框架,它结合了Ruby编程语言、Watir库和Cucumber测试工具,为Web应用程序的测试提供了一种简洁而高效的方法。Ruby是一种面向对象的编程语言,以其清晰的语法和对开发者的友好性...
Ruby 自动化框架Watir(Web ...它的简单易用、丰富的功能以及对多种浏览器的支持,使其成为自动化测试领域中的一个优秀选择。如果你是Ruby开发者,想要提升测试效率和质量,那么学习和掌握Watir将对你的项目大有裨益。
Roo库支持多种文件格式,包括XLS、XLSX和CSV,使得测试人员能够方便地导入和导出测试数据。 例如,我们可以创建一个Excel文件,其中包含测试场景的详细信息,如URL、操作步骤、输入值和预期结果。然后,Ruby脚本...
我用Ruby Watir库写的一个自动答题脚本,答题准确率在70%左右,学习Watir库练手之用,有兴趣的不妨看看,另外,谁有可以改进答题准确率的点子,望不吝赐教。此脚本可不是用来作弊的哦,用这个来答题,绝对通不过防...
此文件太大,压缩成两个part,此为Part1 ,两个文件下载后放一起解压缩即可。 watir本地安装的安装文件共六部分,按照一~六安装即可,每一部分重要的内容在描述里面说明,如有疑问,可以留言。
2. **FireWatir**:作为Watir的一个扩展,FireWatir专为Firefox浏览器设计,提供了更具体的Firefox特定功能,增强了对Firefox的测试支持。 3. **Watir-Webdriver**:随着WebDriver的流行,Watir也推出了Watir-...
Watir支持多种浏览器,包括IE、Firefox、Chrome和Safari,这使得测试环境的选择具有很高的灵活性。 ### **二、环境配置** 在开始使用Watir之前,你需要确保以下组件已安装: 1. **Ruby**: Watir是基于Ruby语言的,...
- **Watir库**:Watir库提供了操作网页元素的方法,如点击按钮、填写表单、导航等,使得测试脚本编写直观且易于理解。 3. **框架介绍** - **Watir-Webdriver**:Watir的一个分支,使用WebDriver协议与浏览器通信...