自动测试AJAX Web UI时使用延迟的替代方法

前端之家收集整理的这篇文章主要介绍了自动测试AJAX Web UI时使用延迟的替代方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我将很快在 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相关文章