接着WEB自动化之旅(二),对RUBY和WATIR框架进行进一步的分析。主要针对WATIR源码进行简单的分析。
一般的WATIR自动化测试都是以对浏览器的初始化开始的:
#Jaycer.D.Woo#
#open the IE browser
ie = Watir::IE.new
# print some comments
ie.goto test_site
这是简单的初始化IE并连接到URL(test_site)
这里用的是IEController的navigate属性转到相应的URL(与.NET中的nevigate同质):
# Navigate to the specified URL.
# * url - string - the URL to navigate to
def goto( url )
@ie.navigate(url)
wait()
sleep 0.2
return @down_load_time
end
一般对PAGE中的object操作:
Text fields
ie.text_field(:name, "field_name").set("Watir World")
对应的源码处理:
def text_field(how , what=nil)
return TextField.new(self, how, what)
end
在CLASS TextField中有
def initialize( ieController, how , what )
@ieController = ieController
@how = how
@what = what
if(how != :from_object) then
@o = @ieController.getObject(@how, @what, supported_types)
else
@o = what
end
super( @o )
end
TextField的初始化方法还有supported_types,size,maxLength,assert_not_readonly,verify_contains,dragContentsTo,append,set,clear等方法.
这里有getObject方法在WATIR中使用普遍。主要是对该PAGE中的各种TAG进行精确定位。然后使用该Object的属性进行特殊事件处理,下面是text_field的set方法主要是事件定位,发送键盘信息等处理。
def set( setThis )
assert_exists
assert_enabled
assert_not_readonly
highLight(:set)
@o.scrollIntoView
@o.focus
@o.select()
@o.fireEvent("onSelect")
@o.value = ""
@o.fireEvent("onKeyPress")
doKeyPress( setThis )
highLight(:clear)
@o.fireEvent("onChange")
@o.fireEvent("onBlur")
end
在源码中也用到了AutoIT与IE.document(在.NET自动化中非常常用,用来对HTML PAGE的document化转化,方便对object的操作)。AutoIT主要是对windows窗口属性的设置和操作,比如发送键盘信息:
def send_keys (key_string)
autoit = WIN32OLE.new 'AutoItX3.Control'
autoit.WinActivate title
autoit.Send key_string
end
设置窗口状态:
def set_window_state (state)
autoit = WIN32OLE.new('AutoItX3.Control')
autoit.WinSetState title, '', autoit.send(state)
end
开源的Watir对于web ui自动化是一个很好的福音,对于几个自动化工具的横向对比,都大体思路大同小异 ,都是对HTML Page的解析,使用object或者文档化后进行正则表达式对对象的准确定位,再使用IEController进行操作,或者使用AutoIT对windows窗口进行操作。希望这简短的分析对大家有帮助。下周开始web service API的测试周.