Selenium测试Ajax程序(转)

上周末参加了Qclub的百度技术沙龙,听了百度的孙景卫讲了Web自动化测试,讲的非常好,然后在小组讨论时又有幸座在了一起。我们讨论的一个内容,就是Ajax应用程序比原来的非Ajax程序更不易测试,这里有两个主要原因。

  第一:Ajax使得基于纯录制的方式无法工作,因为录制一个操作,这次返回需要5秒钟,下次会更多或更少。

  第二:一些测试工具是基于原来非Ajax程序来开发的,后面没做对应的升级。

  但是,同样有很多工具支持Ajax的测试,今天我们就来看一下大名鼎鼎的Selenium如何测试Ajax程序。

  准备Ajax程序

  这里我们使用ASP.NET MVC,实际上你可以使用任何程序来模拟一个AJAX调用。

  a. 准备一个页面,这里我们使用了JQuery.

  ?


1

2

3

4

5

6

7

8

9

10

11

12

13

<input id="GetContent" value="Get" type="button" onclick="GetAjaxContent();" />

 <div id="results" style="border:solid 1px red; display:none;">

 </div>

 <script type="text/javascript">

        function GetAjaxContent() {

            $.ajax({

                url: "Home/GetAjaxContent",

                success: function (html) {

                    $("#results").show().append(html);

                }

            });        

        }

</script>

b. 准备后台程序,把下面的代码加入HomeController. ? 1 2 3 4 5 public ContentResult GetAjaxContent() { Thread.Sleep(9000); return new ContentResult { Content = Hello World }; } c. 效果 当我

  b. 准备后台程序,把下面的代码加入HomeController.

  ?


1

2

3

4

5

public ContentResult GetAjaxContent()

{

   Thread.Sleep(9000);

   return new ContentResult { Content = "Hello World" };

}

c. 效果 当我们点击Get时,页面出现Hello World。

  使用Selenium进行Ajax测试

  如果你没用个Selenium,请参考我的这篇文章Web测试:Selenium使用

  如果我们点击Get按钮后,直接判断页面是否返回”Hello World”时,这样会出错,因为现在还没有立即返回。

  这时我们就需要使用Selenium的WaitForCondition方法,这个方法会不停的去判断一个javascript表达式是否是true. 知道返回true时才继续执行。

  我们可以看到,我们需要写js表达式,如果我们需要判断的很复杂,那么些表达式也是一件很麻烦的事,同时这个方法经过我的使用,它对IE的支持不好。那么有没有更好的方法呢?

  更好的方法判断Ajax调用是否结束

  事实上我们测试Ajax程序最大的麻烦,就是想上面一样来判断Ajax调用是否结束,上面我们是判断页面中如果出现”Hello World”,证明Ajax已经结束了,那么什么是更好的方法呢,我们经常使用的javascript的类库是JQuery,如何判断JQuery的Ajax调用已经结束了呢?

  经过研究发现当没有ajax调用时,Jquery.active=0.

  所以,我们可以使用这个万能的表达式判断Ajax是否返回。

  selenium.WaitForCondition("selenium.browserbot.getCurrentWindow().jQuery.active == 0", "50000");

  是不是整个世界清静多了

  下面我收集了判断其它类库的Ajax活动状态

  jQuery: “jQuery.active”

  Prototype: “Ajax.activeRequestCount”

  Dojo: “dojo.io.XMLHTTPTransport.inFlight.length”

  ASP.NET AJAX:

  Javascript:

  function isInAsyncPostBack() {

  instance = Sys.WebForms.PageRequestManager.getInstance();

  return instance.get_isInAsyncPostBack();

  }

  C#

  selenium.WaitForCondition(“!selenium.browserbot.getCurrentWindow().isInAsyncPostBack()”, “1000″);

原文转自:http://www.ltesting.net

时间: 2024-10-10 07:21:13

Selenium测试Ajax程序(转)的相关文章

Selenium测试规划

开源工具经过近几年的发展,已经出现了一大批成熟的可应用到实际项目中的产品,其中,在WEB自动化测试领域,Selenium支持广泛的浏览器和脚本开发语言,高效的执行效率,获得广泛的应用. 本课程结合Selenium自动化测试工具,讲解自动化测试脚本设计.框架设计和自动化测试的实施方法. 课程大纲: 一.自动化测试基础 Selenium与QTP的对比 Selenium与其它开源自动化测试工具的对比 自动化测试工具基本原理 如何开展和实施自动化测试项目 自动化测试工程师知识体系 二.Selenium自

LoadRunner测试ajax框架,回放后系统中没有产生数据解决方法

LoadRunner测试ajax框架的系统时,录制回放都没有报错,但是回放后系统中没有产生数据,数据始终不能写入数据库.查了一下原因,应该是录制的脚本不完善的问题,因为JS是在客户端执行的程序,LR只能监控客户机与服务器之前的通信. 解决方法: Recording options> HTTP Properites> Advanced > Headers: 选择"Record headers not in list", 然后点ok. 重新录制一遍脚本,会发现脚本里多出一

loadrunner测试ajax框架

loadrunner测试ajax框架的系统时,录制回放都没有报错,但是回放后系统中没有产生数据,解决方法 loadrunnerajax框架测试脚本headerajax [问题描述]用loadrunner测试ajax框架的系统时,录制回放都没有报错,但是回放后系统中没有产生数据,数据始终不能写入数据库.查了一下原因,应该是录制的脚本不完善的问题,因为JS是在客户端执行的程序,LR只能监控客户机与服务器之前的通信. [解决方法]: Recording options> HTTP Properites

LoadRunner测试AJAX

什么是AJAX? Ajax, shorthand for Asynchronous JavaScript and XML, is a web development technique for creating interactive web applications. The intent is to make web pages feel more responsive by exchanging small amounts of data with the server behind th

JUnit 3.8 演示递归删除文件目录的 测试类程序 .

用递归方式来实现删除硬盘的文件或目录(空文件夹) 首先要找到递归的入口及出口,这点很重要,成败在此,呵呵! 代码实现: [java] view plain copy import java.io.File ; class RecursionDeleteFileDemo //利用递归 删除 文件或目录 操作 { public static void deleteFiles(File file) { //递归出口 //判断目前文件,如果是文件 或 是一个空的文件夹,则删除 if(file.isFil

写一个ajax程序就是如此简单

写一个ajax程序就是如此简单 ajax介绍: 1:AJAX全称为Asynchronous JavaScript and XML(异步JavaScript和XML),指一种创建交互式网页应用的网页开发技术.     2:基于web标准XHTML+CSS的表示:     3:使用 DOM进行动态显示及交互:     4:使用 XML 和 XSLT 进行数据交换及相关操作:     5:使用 XMLHttpRequest 进行异步数据查询.检索: 程序员应用ajax的途经: 1:.Net下的Ajax

selenium测试框架使用xml作为对象库

之前已经写过一篇: selenium测试框架篇,页面对象和元素对象的管理 上次使用的excel作为Locator对象管理,由于excel处理不够方便,有以下缺点: 不能实现分page 加载Locator对象 不能够实现Locator对象重名 文件比较大,读写速度没有xml快 所以,重新写了使用dom4j操作xml,使用xml管理Locator对象,能够有效解决以上问题 首先,定义Locator文件 <?xml version="1.0" encoding="UTF-8&

手机测试Android程序

手机测试Android程序 上传者:sanpi329     我也要“分享赚钱” 2014/7/9 关注(23) 评论(0) 声明:此内容仅代表网友个人经验或观点,不代表本网站立场和观点. 测试前准备:android手机.数据线.电脑.eclipse android程序 步骤: 1.用usb数据线将手机与电脑连接(手机2.3.5: 设置-->应用程序-->开发-->usb调试) 2.打开eclipse-->window-->show view-->other-->

Python 语言搭建SELENIUM测试环境,搭建过程记录。

第一步,安装Python: 第二步,安装SetupTools: 第三步,安装Pip: 第四步,安装selenium(for python) 第五步,新建第一个基于Firefox的测试用例 上述 只是步骤,具体内容,明天补充,睡觉 咯--- Python 语言搭建SELENIUM测试环境,搭建过程记录.