大家好,欢迎来到IT知识分享网。
这个算是我目前看到的比较全面的讲解Sahi的一篇文章,在这里记下自己认为需要了解的部分。目前英语确实不太好,看官网有点吃力!希望五年后可以像看中文网页一样舒服!
Sahi简介
Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具。Sahi 运行为一个代理服务器,并通过注入 JavaScript 来访问 Web 页面中的元素(所以可能有些功能无法实现,也属正常)。Sahi 支持 HTTPS 并且独立于 Web 站点,简单小巧却功能强大。它相对于 Selenium 等自动化测试工具,在动态 ID 元素查找和隐式页面等待处理等方面具有一定的优势。选择 Sahi 工具来实现具体 Web 项目的自动化测试是一个很不错的选择。
特性和优势
Selenium 支持的脚本语言比较丰富,且自带 Selenium IDE 自动录制工具,Watir 执行的速度相对其他较快。而 Sahi 同样具备了自带的录制器,且支持几乎所有浏览器,且对 JS 支持较好,拥有页面等待判断机制,内置 Java 异常报告,支持 Ajax 等优势。
基于上下文的页面识别机制:
大多数如 Selenium 等 Web 自动化测试工具或是自动化框架,都采用类似基于 DOM 的定位策略、Xpath 定位策略和 id、name、identifier 等页面元素定位策略。
identifier 识别 username 元素的定位策略:identifier=username。
Id 定位是在知道元素具体 id 特征的情况下的一种更精确定位。
定位页面元素 loginFrom:id=loginFrom。
name 定位方式是去识别第一个匹配名称属性的 UI 元素。(多个元素拥有相同的名称属性,可以使用 value 过滤器来进一步优化您的定位策略)。
定位页面元素为 username:name=username。
Xpath 定位是在 XML 中定位元素的方法,而 HTML 可以被看作是 XML 的一种实现。
Xpath 定位绝对路径:html/body/div[1]/div[1]/div[3]/div[1]/form/span/input[1]。
Xpath 定位相对路径查找://div[@id=’fm’]/form/span/input。
在实际的情况下,页面元素并非如预期般明确。许多的元素值如 ID、Name 等在代码中并不是必须的,常常会缺省。并且,属性值往往不是唯一对应的,页面中有时会存在相同属性的元素。当缺省 id 值或是 Xpath 定位失效时,上述这几种查找定位方式往往显得无助和脆弱。
Sahi 采用了一种主动查找的机制,它不受限于特定的元素属性。在没有 ID、Name 值的情况下,它可以使用一些如“title,value”等属性,这些都是页面可见的属性,所见即所得。Sahi 会通过传入这些可见可识别的属性值,来按照 Sahi 预设的机制进行查找识别。Sahi 允许开发者对每一种元素设置不同属性和特定的查找顺序,包括那些自定义的属性名。所以 Sahi 相对于其他的 Web 自动化测试工具更灵活更开放。
_link(“valueName”)用来定位一个定义为“valueName”的 link,这里的 valueName 并不一定是 value 的属性值,也可以是它的 id、title 等。
Sahi 主要提供了三种基于上下文的元素 API:_in,_near 和_under。
_in 是指在某个 DOM 节点下查找某个元素。
_near 是指在某个元素附近查找相应设定规则条件的最近一个元素。
_under 是指在某个元素下方开始查找,一般_under 都适用在具有相同偏移量的同一列中。
Sahi API 中的 identifier 参数都支持正则表达式,例如,_div(/name.*/) 用来识别所有以某种预属性值是 name 开头的 div。
隐式页面加载响应等待机制:
当前一般的 Web 自动化测试工具没有一个智能的处理机制,来判断何时可以继续下一个操作。
像 Selenium 等自动化测试工具通常会在脚本中人为来设定一个固定的等待时间。但这往往被证实不一定是准确的。实际测试中,人是很难准确判断每一个操作请求需要的合理时间数值。因为,等待时间设置过短,下一步操作在被测应用请求还未返回就执行了,或是由于网络因素使正常的响应时间变长,都可能导致测试过程找不到相应的页面元素,从而导致整个测试用例失败的情况。而如果把时间设置过长,又会造成在一些正常响应过程中的不必要等待的时间浪费,降低了测试效率。
一些测试人员会在自动化测试脚本中加入一些自定义的代码。通过轮询界面上某个指定元素,来判断请求响应是否返回,进而决定继续下一步操作或者是超时。但是,这样的查找过程会导致整个脚本代码变得非常臃肿,加大了开发的成本。更何况,在一个动态的页面找到指定的元素本身就不是一件容易的事。
Sahi 内置了智能的页面等待机制,能够自动判断 Ajax 请求是否已经处理完毕,然后继续下一步操作。并且,这一点对于用户是“隐式”的,不需要增加额外的代码。
个人感觉:对于Sahi的自动定位我有些许疑惑,总感觉定位不太行,不知道是我不会用还是真的在定位这方面有缺陷,我无法自动录制后回放,所以我一般都是自己先手动去定位,然后写成脚本,主要就是利用Sahi来进行回放操作,以此来进行回归测试,目前还处于使用Sahi进行自动化测试的初期,或许Sahi的定位优势会在之后被我查找出来。
本文摘自http://www.ibm.com/developerworks/cn/web/1403_yangxb_sahi/#icomments
仅用于个人知识总结使用!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32639.html