Selenium测试Ajax程序

简介:

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

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

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

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

准备Ajax程序

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

image

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. 效果 当我们点击Get时,页面出现Hello World。  image

使用Selenium进行Ajax测试

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

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

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

image

 

我们可以看到,我们需要写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");

image

是不是整个世界清静多了 image

 

下面我收集了判断其它类库的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″);

 

 

 

最后,打个小广告,招聘Web测试人员,有Web测试经验,较好的英语能力,思路清晰,能够理解客户需求(不依赖开发人员)和写出较好的测试用例。有编程经验者优先考虑,有Web Service测试经验者优先考虑,要求工作态度认真,积极好学者。 薪水范围5K--8K。上岗时间2周之内,有意者或者有介绍人的,请联系我,我的邮箱wangdeshui@gmail.com

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2010/07/27/1785834.html如需转载请自行联系原作者


王德水

相关文章
|
安全 JavaScript 前端开发
AppSpider 7.5.020 发布 - Web 应用程序安全测试
AppSpider 7.5.020 for Windows - Web 应用程序安全测试
13 0
|
15天前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
37 4
|
5月前
|
监控 安全 测试技术
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
143 14
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
|
6月前
|
安全 测试技术 Linux
Acunetix v25.4 发布 - Web 应用程序安全测试
Acunetix v25.4 (Linux, Windows) - Web 应用程序安全测试
182 3
Acunetix v25.4 发布 - Web 应用程序安全测试
|
5月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
97 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
8月前
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
101 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
|
10月前
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
1287 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
7月前
|
自然语言处理 安全 测试技术
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
362 0
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
|
10月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
424 13
|
11月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
267 1

热门文章

最新文章