您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > watir+ruby(第三讲)常用语法
Watir常用语法集一.如何控制IE浏览器1.1使用Watir工具,需要在脚本中加上require'rubygems'require'watir'1.2打开一个新的IE窗口在创建的同时直接转到页面ie=Watir::IE.start或者ie=Watir::IE.newie.goto()1.3控制已经打开的指定IE窗口ie=Watir::IE.attach(:url,')ie.maximize1.4关闭IE窗口ie.close1.5关闭所有打开的IE窗口i=1foriin1..10Watir::IE.eachdo|ie|sleep1ie.closeendi=i+1end二.元素定位与控制2.1控制超级链接源代码如:ahref=这样的代码,可以有两种方法来控制使用文本属性(TextAttribute)ie.link(:text,ickaxe).click使用url属性ie.link(:url,).click2.2控制复选框checkbox源代码如:inputtype=checkboxname=checkmevalue=1可以用两种方法进行控制:使用name属性:ie.checkbox(:name,checkme).set#选中ie.checkbox(:name,checkme).clear#清空使用name属性和value属性:ie.checkbox(:name,checkme,1).set#选中ie.checkbox(:name,checkme,1).clear#清空2.3控制单选框radio源代码如:inputtype=radioname=clickmeid=1可以用两种方法进行控制:使用name属性:ie.radio(:name,clickme).set#选中ie.radio(:name,clickme).clear#清空使用name属性和value属性:ie.radio(:name,clickme,1).set#选中ie.radio(:name,clickme,1).clear#清空2.4控制选择框源代码如:selectname=selectmeoptionname=1optionname=2WebTestingoptionname=3inRubyoptionname=4isfun/select选择其中的一个属性:ie.select_list(:name,selectme).select(isfun)清空属性:ie.select_list(:name,selectme).clearSelection2.5文本框中输入文本可以通过name属性和id属性来进行识别和操作:如源代码:inputtype=textname=typeinme填充数据:ie.text_field(:name,typeinme).set(WatirWorld)清空数据:ie.text_field(:name,typeinme).clear2.6buttons按钮源代码为:inputtype=buttonname=clickmevalue=ClickMe可以使用name属性和value属性:ie.button(:name,clickme).click#利用name属性ie.button(:value,ClickMe).click#利用value属性2.7Forms表单中的按钮源代码为:formaction=submitname=submitformmethod=postinputtype=submitvalue=Submit/input/form可以通过name或者value属性来表示ie.button(:name,submitform).clickie.button(:value,Submit).click2.8Forms表单中的图片按钮如源代码为:formaction=submitname=doitformmethod=postinputtype=imagesrc=images/doit.gifname=doit/form可以通过name属性来表示ie.button(:name,doit).click2.9Forms表单没有按钮进行提交如源代码为:formaction=loginname=loginformmethod=getinputname=usernametype=text/input/form可以通过提交forms表单本身的name,action和method来实现ie.form(:name,loginform).submitie.form(:action,login).submit2.10框架和嵌套框架代码如:framesetcols=*,*framesrc=menu.htmname=menuframesrc=main.htmname=main/frameset用ie.show_frames可以打印出当前页面框架的数量和名称:irb(main):009:0ie.show_framesthereare2framesframeindex:1name:menuframeindex:2name:main=0..1Watir允许通过名称属性来访问框架,如:ie.frame(:name,menu)如果要访问menu框架中的一个超链接ahref=index.htmClickMenuItem/a,可以ie.frame(:name,menu).link(:text,ClickMenuItem).click嵌套框架ie.frame(:name,frame).frame(:name,nested_frame)三.创建标准测试用例,用if和断言验证结果3.1创建测试用例1.Class类必须以大写字母开头后面紧跟Test::Unit::TestCase2.def方法必须以test开头3.当一个类里面有多个方法时,ruby默认会随机运行测试案例,如果需要顺序执行,需要在test后加上字母或数字来强迫它顺序执行,比如“test_a_mytest”4.测试用例模型:require'rubygems'require'watir'require'test/unit'classTC_myTestTest::Unit::TestCasedeftest_myTestCase#用例内容enddeftest_anotherTestCase#用例内容enddeftest_aTestCase#用例内容endend5.应用举例require'rubygems'require'watir'require'test/unit'classGoogleHomePageTest::Unit::TestCasedeftest_jointesti=1j=1foriin1..10forjin1..10Watir::IE.eachdo|ie|ie.closeendj=j+1endie=Watir::IE.start(:id,lst-ib).setsite:(:value,Google搜索).clickie.link(:text,自动化测试论坛-JoinTest-PoweredbyDiscuz!).clicki=i+1endendend3.2if判断和断言1.用if判断事物真假#判断当前页面是否存在“欢迎您...”这几个连续的字(字符串)ifie.contains_text(欢迎您...)#判断当前页面是否存在“name“等于“loginname”的控件ifie.text_field(:name,loginname).exists?#判断当前页面是否存在“value“等于“登录”的控件ifie.button(:value,登录).exists?#判断当前页面是否存在“立即购买”这几个连续的字(字符串)ifie.text.include?(立即购买)2.断言事物的真假#断言当前页面的标题“ie.title“等于会员登录/注册,为真继续,为假抛出错误assert_equal(ie.title,会员登录/注册)#断言当前页面存在“name“等于“loginname”的控件,为真继续,为假抛出错误assert(ie.text_field(:name,loginname).exists?)#断言当前页面存在“name“等于“loginname”的控件,为假继续,为真抛出错误assert_false(ie.text_field(:name,loginname).exists?)#断言当前页面存在“value”等于“登录”的控件,为真继续,为假抛出错误assert(ie.button(:value,登录).exists?)#断言当前页面存在“立即购买“这几个连续的字,为真继续,为假抛出错误assert(ie.text.include?(立即购买)四.常见问题及解决方案我们经常会碰到,且在网络上至今没有很好的解决方案的三个问题,我研究了几个解决方案,验证了上百次,次次能成功执行,现分享给大家!4.1关闭所有IE关于关闭所有打开的IE不能关闭完全的问题,用一个循环搞定i=1foriin1..10Watir::IE.eachdo|ie|ie.closeendi=i+1end4.2JS弹出窗口处理用一个近似死循环的循环搞定autoit=WIN32OLE.new('AutoItX3.Control')whileie.link(:text,删除).exists?ie.link(:text,删除).click_no_waitret=1whileret==1#切换#autoit.Send('{TAB}')#取消#autoit.Send('{ESC}')#删除autoit.Send('{ENTER}')#第一个''内容为弹出层标题,第二个''内容为提示框包含的内容,可以为空,9表示检查次数ret=autoit.WinWait('来自网页的消息','你确认删除吗',9)endend4.3不能set中文的问题(新手建议方案一)方案一:可以用value代替set,举例如下ie.text_field(:name,loginname).set中文账号ie.text_field(:name,loginname).value=中文账号方案二:1.当前所有class文件编码格式统一选GB2312(或者GBK)2.所有rubyclass文件代码前面加require'win32ole'WIN32OLE.codepage=WIN32OLE::CP_ACP方案三:1.当前所有class文件编码格式统一选GB2312(或者GBK)2.C:\Ruby187\lib\ruby\gems\1.8\gems\watir-1.6.5\lib\watir文件下win32ole.rb里面的WIN32OLE.codepage=WIN32OLE::CP_UTF8改成WIN32OLE.codepage=WIN32OLE::CP_ACP
本文标题:watir+ruby(第三讲)常用语法
链接地址:https://www.777doc.com/doc-2866917 .html