摘要: WinGetClassList 是一个非常有用的函数,可以返回当前窗口中所有的handle。返回的是一个字符串,可以使用split函数来拆分之。Opt("WinTitleMatchMode")$handle = WinGetHandle(".NET Reactor v4.5.9.8 - Full Version")ConsoleWrite(WinGetClassList($handle))运行上面的方法,我可以得到目前窗口所有的handle如下:WindowsForms10.Window.8.app.0.1f550a4_r15_ad1WindowsFor 阅读全文
posted @ 2013-09-03 16:37 chenpassion 阅读(3226) 评论(0) 推荐(0) 编辑
摘要: 我应用自动化测试技术提高自己的测试效率,已经实践了好几年了,也从0开始搭建过Web自动化测试框架,回过头来,发现下面这篇文章,与我这么多年实践遵循的方式,以及我自己对自动化测试的理解,完全如出一辙,现在转载这篇文章,给对自动化测试技术感兴趣的童孩们分享一下。以下是自动化测试框架的建议,需要在以后的实践中改进。自动化测试框架一般可以分为上下两个层次,上层是管理整个自动化测试的开发,执行以及维护,在比较庞大的项目中,它体现重要的作用,它可以管理整个自动测试,包括自动化测试用例执行的次序、测试脚本的维护、以及集中管理测试用例、测试报告和测试任务等。下层主要是测试脚本的开发,充分的使用相关的测试工具, 阅读全文
posted @ 2013-08-29 09:01 chenpassion 阅读(741) 评论(0) 推荐(1) 编辑
摘要: $file = FileOpen(@ScriptDir&"\RegInstalledItems.csv",1)if $file = -1 Then ConsoleWrite("ERROR: Unable to write to the output file") ExitEndIf$i = 1While not @error $var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i) If @er 阅读全文
posted @ 2013-08-28 09:59 chenpassion 阅读(1041) 评论(0) 推荐(0) 编辑
摘要: 我的自动化脚本在运行的时候,会生成一个界面,点击该页面上的按钮能够进行自动化操作。经常遇到的一个问题是:脚本运行一半,GUI程序出现了异常情况,这个时候,再次点击生成的界面上的按钮,不会有任何反应,我需要重新启动exe文件,程序的健壮性受到了考验。为了解决这个问题,只需要在脚本中加入少量的错误验证即可: $check = WinWaitActive("License Examiner", "", 5) if $check = 0 Then ConsoleWrite(@HOUR & ":" & @MIN & &q 阅读全文
posted @ 2013-08-27 11:34 chenpassion 阅读(1551) 评论(0) 推荐(0) 编辑
摘要: 2008年的时候第一次接触AutoIt,当时觉得局限性太多了,就不想学,觉得把Watir,Ruby搞好就行了。最近一段时间比较闲,发现自己对GUI的自动化操完全是短板,就把AutoIt重新拾起来了。不再考虑什么局限性了,想着,反正现在,GUI自动化操作我啥也不会,学习了解一下总是好的。也许是先入为主的想法太严重了,我对Send,controlSend命令是有偏见的,觉得定位能力差,一旦一个界面不是在前端就定位不了。习惯性的使用controlClick, ControlCommand, ControlSetText命令。但是当使用AutoIt脚本越来越多,我发现,AutoIt自动化操作的短板就出 阅读全文
posted @ 2013-08-23 15:29 chenpassion 阅读(10391) 评论(1) 推荐(0) 编辑
摘要: 有一个界面如上图:黑色框框部分是一个整体,也是一个gridview,如果我想把框框中右侧数据获取出来,该如何操作?我尝试过了很多途径,都无法成功。今天,我发现,当鼠标焦点在黑色框框左侧的部分的时候,该焦点右侧的内容可以通过ControlGetText获得,于是我就有办法获取该gridview中右侧所有的内容了。方法如下:opt("WinTitleMatchMode")$handle = WinGetHandle(".NET Reactor v4.5.9.8 - Full Versio")WinActivate($handle)dim $arrayx[6] 阅读全文
posted @ 2013-08-21 11:51 chenpassion 阅读(869) 评论(0) 推荐(0) 编辑
摘要: require 'nokogiri'XML_FILE = "C:\\Users\\chenpassion\\Desktop\\20130806.xml"xml = Nokogiri::XML.parse(File.read(XML_FILE), XML_FILE)xml.xpath('//NewspaperReport').each {|x| if !x.attributes.include?("DownloadState") || x.attributes["DownloadState"].value 阅读全文
posted @ 2013-08-20 14:43 chenpassion 阅读(712) 评论(0) 推荐(0) 编辑
摘要: 如果使用Ruby脚本,uniq函数就能搞定一切。不过我们现在还是讨论怎么用excel的Countif函数吧。假设Excel中有一列数据:我现在想把重复的数据只留下一个,该如何处理?方法如下:1. 使用Countif函数,计算A列中各个数字重复次数,每次计算的行号是递增的2. 对Excel中所有列进行降序排列,得到如下图:3. 把B列所有大于1的行全部删除即可。 阅读全文
posted @ 2013-08-16 17:10 chenpassion 阅读(3859) 评论(0) 推荐(0) 编辑
摘要: 假设Excel中有两列,现在要比较两列数据的不同。我们可以使用Match函数(最后一个参数是0)或者VLookup函数来操作, C列中,#N/A标示,B列中没有A列中的数值。VLookup方法: 阅读全文
posted @ 2013-08-16 17:06 chenpassion 阅读(2226) 评论(0) 推荐(0) 编辑
摘要: require 'win32ole'ai = WIN32OLE.new("AutoItX3.Control")ai.RunWait("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255") 阅读全文
posted @ 2013-08-16 17:02 chenpassion 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 假设我书写了很多测试用例,测试用例中都有:require 'test/unit'后来我想把很多这样的测试用例组织在一起运行,我使用了两个require:require 'test/unit'require 'test/unit/ui/console/testrunner'于是我运行如下用例集合:include Test::Unit::UI::Console testcases = [TC_AddPeople] testcases.each{|testcase| TestRunner.run(testcase)}我得到的错误提示如下:Loaded 阅读全文
posted @ 2013-08-16 17:01 chenpassion 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 如果存在以下的场景:1. 放置在公司的读报机服务器,每天都是开启的;2. 读报机每天下载报纸,一旦成功/失败,就会有相应的记录生成在某个xml文件中;3. 现在有过去一年的读报机下载xml,大约有200多份,每份xml中存储了记录如下:现在你的经理想从测试人员你那儿获取一些知识:过去一年,我们的读报机功能,哪些报纸一直能够给客户下载?哪些报纸我们告诉客户是可以下载的,但是实际上是下载失败的?如果去找开发,也许通过连接数据库,运行一下SQL查询,记录就出来了,但是如果服务器不允许你访问,需要你统计结果,那怎么办?如果你会Ruby脚本,一切都非常简单:path = "C:\\Users\ 阅读全文
posted @ 2013-08-16 17:00 chenpassion 阅读(404) 评论(0) 推荐(0) 编辑
摘要: Similar Threads1. WIN32OLE - failed to create WIN32OLE2. WIN32OLE#[] and WIN32OLE#[]= method in Ruby 1.9 (or later)For example, excel = WIN32OLE.excel("Excel.Application") excel["Visible"] = trueis NG.Instead, You must write excel = WIN32OLE.excel("Excel.Application") e 阅读全文
posted @ 2013-08-16 16:57 chenpassion 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 如果安装了搜狗,Watir::Browser.new并不一定能打开新的IE浏览器。这种情况下,必须卸载搜狗浏览器,当然,attach,find方法还是可以用的 阅读全文
posted @ 2013-08-16 16:55 chenpassion 阅读(186) 评论(0) 推荐(0) 编辑
摘要: Watir-WebDriver对于已经打开的浏览器,没有办法进行Attach操作。但是对于自动化操作浏览器过程中点击某链接,打开的新浏览器,是能够定位到的。require 'watir-webdriver'def attach_browser(browser, how, url) browser.driver.switch_to.window(browser.driver.window_handles[0]) browser.window(how, /#{url}/).useendie2 = Watir::Browser.new :chromeie2.goto("ht 阅读全文
posted @ 2013-08-16 16:53 chenpassion 阅读(635) 评论(0) 推荐(0) 编辑
摘要: #Suppose we will access an SVN netrequire 'watir-webdriver'b = Watir::Browser.new :chromeb.goto 'https://admin:password@yourwebsite.com'#Firefox Deal with Certification:profile = Selenium::WebDriver::Firefox::Profile.new profile.assume_untrusted_certificate_issuer = falseb = Watir::B 阅读全文
posted @ 2013-08-16 16:51 chenpassion 阅读(267) 评论(0) 推荐(0) 编辑
摘要: Watir对富文本编辑,一般可以采用b.frame().document.body.innerText = "Value you want to insert"但是Watir-WebDriver不支持这种方法。不过有两种方法可以通过Watir-WebDriver向所见即所得编辑器(应该指的是富文本编辑器)中输入文字:定位编辑器所在的iFrame,然后使用.send_keys方法(缺点是浏览器必须在前台运行)在浏览器上执行javascript,通过js脚本去设置编辑器的值。#CKEditorrequire 'watir-webdriver'b = Watir: 阅读全文
posted @ 2013-08-16 16:50 chenpassion 阅读(430) 评论(0) 推荐(0) 编辑
摘要: 以下代码支持Firefox,IE,Chromerequire 'watir-webdriver'#require "watir-webdriver/extensions/alerts"b = Watir::Browser.new :chromeb.goto("http://192.168.10.110:ab/PersonInfo.aspx")b.text_field(:id, "txtName").set("w3")b.text_field(:id, "txtPwd").set( 阅读全文
posted @ 2013-08-16 16:49 chenpassion 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 特别声明:该报表框架不是我搭建的。 阅读全文
posted @ 2013-08-16 16:47 chenpassion 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2013-08-16 16:46 chenpassion 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 我在群空间,总是看到很多Watir新手,反复的问:我对元素的定位怎么又出错?我该从哪里着手啊?我给一个我认为最简单方便的学习方法。1. Ruby语法基础要入门,网上有一个不到2M的帮助文档,从头到尾仔细瞅瞅,每个语句自己手动执行一下,Ruby就能入门了;2. 进入安装好的Ruby,Watir的目录:D:\Ruby193\lib\ruby\gems\1.9.1\gems\watir-classic-3.0.0,把该文件夹导出到eclipse或者Netbeans项目中,就这些Example一个个执行下去,之后基本上就是Watir入门了。 阅读全文
posted @ 2013-08-16 16:42 chenpassion 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 以下是一个很经典的把Watir与AutoIt连接在一起的实例。如果我们对AutoIT了解的更多,处理类似的问题会更加简单。以下实例会判断页面上是否有某“删除”链接,一旦有该链接,就点击,然后点击弹出的警告框上的“确定”按钮,直到页面上不再有“删除”链接为止。require 'watir'require 'win32ole'class WindowHelper def initialize( ) @autoit = WIN32OLE.new('AutoItX3.Control') end def push_alert_button() @autoi 阅读全文
posted @ 2013-08-16 16:41 chenpassion 阅读(507) 评论(0) 推荐(0) 编辑
摘要: class WIN32OLE def list_ole_methods method_names = ole_methods.collect {|m| m.name} puts method_names.sort.uniq endendWIN32OLE.new('Shell.Application').list_ole_methods得到如下方法:AddRefAddToRecentApplicationBrowseForFolderCanStartStopServiceCascadeWindowsControlPanelItemEjectPCExploreExplorerPol 阅读全文
posted @ 2013-08-16 16:39 chenpassion 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 对于Ruby 1.8版本,以管理员身份运行命令行窗口,输入Regsvr32 AutoItX3.dll路径即可。对于1.9 版本,路径与1.8版本是不同的,我们可以进入Ruby安装目录下,搜索AutoItX3.dll,搜索到之后,找到相应路径,然后以管理员身份运行命令行窗口,输入:regsvr32 D:\Ruby193\lib\ruby\gems\1.9.1\gems\rautomation-0.7.2\ext\AutoItX\AutoItX3.dll回车即可。 阅读全文
posted @ 2013-08-16 16:38 chenpassion 阅读(595) 评论(0) 推荐(0) 编辑
摘要: 为了提高自己的工作效率,我曾经对Watir进行了系统性的学习,比起学习C++,Java等始终不得门,Watir还是学进去了,能够完整搭建出一个自己很容易理解的自动化架构。之后我想继续在自动化测试方明提高自己,就把Ruby语言从头到尾走了一遍,还是有些收获的,虽然现在脑海里面也记不起来多少东西,但是就自动化测试这一方面来说,还是很有自信的。Watir,Ruby能够很大程度上提高测试效率,这点是毋庸置疑的,印象深刻的是,以下场景下,Watir和Ruby帮了我的忙。场景1:重现一些难以重现的Bug公司产品有一个功能,用户可以在google地图上画一条路线,然后可以在这条路线上跑步健身,从而进行一些统 阅读全文
posted @ 2013-08-16 16:36 chenpassion 阅读(348) 评论(0) 推荐(0) 编辑