我将很快在 AJAX驱动的网页上从Web Service(WCF)生成大量内容.

我曾经测试过这样的事情(发现很简单),但是没有这种动态内容的水平.

我正在使用Visual Studio 2008在.NET 3.5中开发.我设想这个测试在:

> TestDriven.NET
> MBUnit(这不是单元测试)
>某种自动化工具
控制浏览器(也许硒,
虽然可能是SWEA或Watin.
我在想IE,Firefox和可能
歌剧和Safari)

过去我在测试浏览器时使用了延迟.我不是特别喜欢这样做,浪费时间.

有什么经验和做法比做等待更好地做事情.可能引入回调和功能性的编程风格来运行测试?

备注1.审查前3条答复后的更多细节.

1)感谢艾伦,埃伦和马克西斯,你的答复让我走上轨道,得到我的答案,希望没有太多的时间花费.

2)另外一个细节,我使用jQuery来运行Ajax,所以这不是建立在Asp.NET AJAX中的.

3)我发现一篇文章很好地说明了情况.是从http://adamesterline.com/2007/04/23/watin-watir-and-selenium-reviewed/

3.1)硒样本(这个和下一个,WatiN,代码示例不会显示在原始网页(在IE或Firefox上),所以我已经提取了它们,并在这里列出.)

public void MinAndMaxPriceRestoredWhenopenedAfterUsingBackButton(){
  OpenbrowserTo("welcome/index.rails");
  bot.Click("priceDT");
  WaitForText("Price Range");
  WaitForText("515 N. County Road");
  bot.Select("MaxDropDownList","$5,000,000");
  WaitForText("Prewar 8 Off Fifth Avenue");
  bot.Select("MinDropDownList","$2,000");
  WaitForText("of 86");
  bot.Click("link=Prewar 8 Off Fifth Avenue");
  WaitForText("Rarely available triple mint restoration");
  bot.GoBack();
  Thread.Sleep(20000);
  bot.Click("priceDT");
  WaitForText("Price Range");
  Assert.AreEqual("$5,000",bot.GetSelectedLabel("MaxDropDownList"));
  Assert.AreEqual("$2,bot.GetSelectedLabel("MinDropDownList"));}

3.2)WatiN样品

public void MinAndMaxPriceRestoredWhenopenAfterUsingBackButton(){
  OpenbrowserTo("welcome/index.rails");
  ClickLink("Price");
  SelectMaxPrice("$5,000");
  SelectMinPrice("$2,000");
  ClickLink("Prewar 8 Off Fifth Avenue");
  GoBack();
  ClickLink("Price");
  Assert.AreEqual("$5,SelectedMaxPrice());
  Assert.AreEqual("$2,SelectedMinPrice());}

3.3)如果你看这些,显然等同的样品,你可以看到WatiN样品已经抽出了等待.

3.4)然而,WatiN可能需要额外的支持,如http://watinandmore.blogspot.com/2008/01/using-watin-to-test-select-lists-in.html所述,通过Ajax调用更改的值.在该文章中,给出了一个可用于合成更改事件的附加字段,如下所示:

// Wait until the value of the watintoken attribute is changed
ie.SelectList("countries").WaitUntil(!Find.By("watintoken",watintoken));

4)现在我在后面是一种方式来做一些类似我们在WatiN代码中看到的没有那个合成事件的方法.它可能是一种直接挂接到事件的方式,如已更改的事件.我不会有回调的问题,尽管这可能会改变测试的编码方式.我也认为我们将会看到替代的方式来编写测试,因为C#3,VB 9和F#中的新功能的含义开始沉入(并不介意探索).

5)marxidad,我的来源没有从WebAii的样本,所以我没有任何评论这个,有趣的看,工具.

备注2. 2008-09-29.经过一些独立于此页面的反馈.

5)我尝试获得上面WatiN示例代码的更完整的源代码.不幸的是,它不再可用,链接已经死了.当这样做时,我注意到DSL的谈话,大概是一个在网页和自动化工具之间映射的模型.我没有发现任何细节.

6)对于WebAii,建议使用这样的代码(未经测试):

public void MinAndMaxPriceRestoredWhenopenAfterUsingBackButton(){
  Activebrowser.Navigateto("welcome/index.rails"); 
  Find.ByContent<HtmlAnchor>("Price").Click();
  HtmlSelect maxPrice = Find.ById<HtmlSelect>("MaxDropDownList"); 
  HtmlSelect minPrice = Find.ById<HtmlSelect>("MinDropDownList");
  maxPrice.SelectByText("$5,000"); 
  minPrice.SelectByText("$2,000");
  Find.ByContent<HtmlAnchor>("Prewar 8 Off Fifth Avenue").Click(); 
  Activebrowser.GoBack();
  Find.ByContent<HtmlAnchor>("Price").Click(); 
  maxPrice.AssertSelect().SelectedText("$5,000"); 
  minPrice.AssertSelect().SelectedText("$2,000");}

6)从代码我可以清楚地避免等待和延迟,一些框架,但我需要花更多的时间来看看WatiN是否适合我.

大多数自动化框架都内置了一些同步功能.Selenium也不例外,包括waitForText,waitForElementPresent等功能.

我刚刚意识到你提到上面的“等待”,我解释为“睡眠”(这在自动化方面不好).让我知道,如果我误解了,我可以更多地谈论等待*功能或替代品.

自动测试AJAX Web UI时使用延迟的替代方法的更多相关文章

  1. 如何在iOS中为预期的assert / assertionFailure编写单元测试?

    这里的问题是,当someString参数为空字符串时,您可以保证函数不会失败–在您的实际应用程序中.这是因为断言不在发布版本中运行.结果是你可以在开发过程中使用assert作为调试的一种形式,但如果这种情况在现实生活中发生,你应该按顺序处理它,而不是崩溃.因此测试断言“发生”是否真的不是一种有效的单元测试技术,这就是为什么你以这种方式使用它的麻烦.

  2. ios – 核心数据并发调试:假阳性

    如WWDC2014session225(核心数据新增内容)所述,iOS8和OSX优胜美地的核心数据现在支持命令行参数-com.apple.CoreData.ConcurrencyDebug1,以启用检测到违反CoreData的并发合同的断言.在我的实验中,我发现它在iOS8beta1(在设备和模拟器中)都可以工作,但是我似乎发现了一个错误的肯定,即框架是抛出一个多线程违规异常不这样做至少这是我的信

  3. ios – 为什么Web Inspector向我显示“无检查应用程序”?

    什么可能是一个可能的原因,什么可以解决?解决方法我有同样的问题,这是因为我正在运行iOS8,通过将Safari更新到7.1来修复.

  4. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  5. swift 断言(assert)

    和OC断言用法一样,只不过方法名去掉"NS"就可以了.断言可以让你程序在不满足断言条件时崩溃到断言处.当你的程序对参数有严格要求时,可以使用断言对参数进行检查.而且断言可以在release版本中配置去掉.

  6. Swift入门四——可选类型Optionals与断言Assert

    String和Int类型对应的可选类型分别是String?等可选类型的变量值均可以为nil。然而强制解封一个值为nil的可选类型会导致运行时错误。可选绑定Swift是一门简洁的语言,使用强制类型解封来获取可选类型变量里的值过于麻烦,是很多人不愿意使用的。所以在使用隐式可选类型变量时,为了安全起见,还是应该用if语句进行判断。附录查看完整专栏——《Swift轻松入门》

  7. 2.Swift 中的assert

    在Swift中,自带了一个断言的方法,其中的断言可选为带断言信息,有的可选为不带断言信息,下面让我们来看看.下面让我们来看看一个简单的小例子PS:assert分为两个参数,一个是condition,为bool值,为true不会断言,为false就会断言,后面的message是一个可选的错误信息,如果需要的话,就可以使用,不需要的也可以直接不写.再者,我们可以把判断条件放在condition里面去,

  8. Swift可选绑定、断言

    可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。断言可选类型可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。此外,断言允许你附加一条调试信息。然而,在你的应用发布之前,有时候非法条件可能出现,这时使用断言可以快速发现问题。

  9. Swift中assert(断言)的使用

    在Swift中,通过assert实现断言,assert可以帮助开发者比较容易的发现和定位错误一个断言断定条件是true.通过声明一个断言来确保某个必要的条件是满足的,以便继续执行接下来的代码。代码注意点断言可以引发程序终止,并不是被设计用来避免不在发生无效情况的。

  10. Swift 断言 assert

    断言Optionals使得我们可以检测值是否存在。在这些情况下,可以使用触发断言来终止执行并提供调试。断言是在运行时检测条件是否为true,如果为true,就继续往下执行,否则就在这里中断。

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部