软件测试自动化之路(7)----在Web GUI Automation Test中使用JavaScript应注意的问题
2010-08-13 23:40
736 查看
在Web GUI Automation Testing中操作页面元素是可以通过JavaScript来进行的,有的开源测试工具就是这么做的如Selenium。另外一种方法是通过给浏览器注入测试用的JavaScript来完成你的测试。本文在此不是讨论如何去来完成这些工作的,而是试图分析,应该把这些以测试为目的JavaScript用在什么地方。如果滥用就会矫枉过正,达不自动化测试目的。
对于Web GUI Automation Testing,注入的Javascript测试脚本最好只用来操作可见的页面元素。因为考虑到页面有可能含用操作逻辑,对Button/CheckBox/RadioBox应该使用onclick();HyperLink的click()事件往往不会引发相应的target window的装载,应该要特别处理;对Text文本框不能仅设置Value了事,而应如真实用户所做的输入那样。诸如此类的问题,应该遵从真实用户的所做的输入点击那样。
对于不可见的页面元素,应该认为它们对你的程序来说是只读性的,只可读取它的值,而不可越俎代庖,去改变它们的值,因为对这些不可见元素的值都有AUT(application under test)本身的逻辑所决定和改变,否则这种测试就可能变一种极富侵入式的测试。
对于页面中的AUT本身的JavaScript函数,也不应该去用你的测试JavaScript去调用它们。除非你非常清楚这些AUT的JS函数所需的上下文,并为他们准备好了这一切。即使这样我还是不推荐你这样做,想想看,有什么比把AUT的代码逻辑带到Automation Testing代码中更混乱的事情呢?最后你可能会发现你的Automation Testing Code把AUT的逻辑又给实现了一次,但它确实只应该做测试的事情。可是你看,现在它都做了些什么?:-)
最后还要注意问题是,如果在你的GUI automation Testing中混合了注入的JavaScript调用和通用的GUI测试脚本(如:QTP脚本),那么它们之间的执行是异步的,而不是线性执行的。如下面的pseudocode:
1) Call JavaScriptFun('select combox and input something') // Call 注入的JavaScriptFun here!
2) ClickButton Name='Ok' //QTP script here!
对于1),2)两句因为执行的空间是不一样的,其中第1句是在你的web browser中执行了,而第2句在QTP中执行的,它们并非按照代码的书写顺序那样把所包含的动作线性的执行,所以它们是异步执行的。换句话说,当第2)句执行的时候,可能javascript并未完成所定义的操作。此时我们需要额外考虑执行同步问题。而如果都是QTP script就不会存在这种问题。如:
1) SelectCombox Name='QTP' // QTP script here!
2) ClickButton Name='Ok' //definitely execute 2) after 1) had been completed
对于Web GUI Automation Testing,注入的Javascript测试脚本最好只用来操作可见的页面元素。因为考虑到页面有可能含用操作逻辑,对Button/CheckBox/RadioBox应该使用onclick();HyperLink的click()事件往往不会引发相应的target window的装载,应该要特别处理;对Text文本框不能仅设置Value了事,而应如真实用户所做的输入那样。诸如此类的问题,应该遵从真实用户的所做的输入点击那样。
对于不可见的页面元素,应该认为它们对你的程序来说是只读性的,只可读取它的值,而不可越俎代庖,去改变它们的值,因为对这些不可见元素的值都有AUT(application under test)本身的逻辑所决定和改变,否则这种测试就可能变一种极富侵入式的测试。
对于页面中的AUT本身的JavaScript函数,也不应该去用你的测试JavaScript去调用它们。除非你非常清楚这些AUT的JS函数所需的上下文,并为他们准备好了这一切。即使这样我还是不推荐你这样做,想想看,有什么比把AUT的代码逻辑带到Automation Testing代码中更混乱的事情呢?最后你可能会发现你的Automation Testing Code把AUT的逻辑又给实现了一次,但它确实只应该做测试的事情。可是你看,现在它都做了些什么?:-)
最后还要注意问题是,如果在你的GUI automation Testing中混合了注入的JavaScript调用和通用的GUI测试脚本(如:QTP脚本),那么它们之间的执行是异步的,而不是线性执行的。如下面的pseudocode:
1) Call JavaScriptFun('select combox and input something') // Call 注入的JavaScriptFun here!
2) ClickButton Name='Ok' //QTP script here!
对于1),2)两句因为执行的空间是不一样的,其中第1句是在你的web browser中执行了,而第2句在QTP中执行的,它们并非按照代码的书写顺序那样把所包含的动作线性的执行,所以它们是异步执行的。换句话说,当第2)句执行的时候,可能javascript并未完成所定义的操作。此时我们需要额外考虑执行同步问题。而如果都是QTP script就不会存在这种问题。如:
1) SelectCombox Name='QTP' // QTP script here!
2) ClickButton Name='Ok' //definitely execute 2) after 1) had been completed
相关文章推荐
- 软件测试自动化之路(8)----如何做更好的GUI Automation Testing
- MSDN Webcast - 使用Windows Mobile Test Framework进行自动化测试(Level 300)
- 使用OSS JavaScript的sdk进行web端直传,开发环境下测试没有问题,但部署到服务器上或者打包到IOS原生包中出现了问题。
- 小公司0成本基于Pythony的单元\GUI\Web自动化\性能的几个开源软件测试工具
- RFT(Rational Functional Test)是IBM开发的一套自动化测试工具,可以测试web, GUI和console。
- GUI Automation Test Distilled 图形用户界面自动化测试精粹
- 【软件测试自动化-QTP系列讲座 11】== AOM应用(一)+QuickTest+Automation ==
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 使用docker selenium 构建web自动化分布式测试环境时,遇到的一些问题
- 新版testFlight中开发人员如何给测试人员推送ios测试包(含使用testFlight要注意的地方)
- javascript 使用for循环时该注意的问题-附问题总结
- 【Sahi】使用 Sahi 实现 Web 自动化测试
- RCP使用JCL部署到WebStart上要注意的问题
- 使用Selenium/Ant做Web应用远程自动化测试
- 前端自动化测试工具--使用karma进行javascript单元测试(转)
- 如何使用Coded UI Test对Webpage进行自动化测试
- 【软件自动化测试-QTP实战技能 7】== QTP中类的基本使用方法
- 使用Rancher部署K8S时需要注意的软件版本问题
- 新版testFlight中开发人员如何给测试人员推送ios测试包(含使用testFlight要注意的地方)
- Unity3D的Delegate和SendMessage的性能差测试,以及Delegate在多线程使用要注意的小问题