当前位置:  开发笔记 > 前端 > 正文

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

如何解决《在自动测试AJAXWebUI时使用延迟的替代方法》经验,为你挑选了0个好方法。

我将很快开发AJAX驱动的网页,其中包含从Web服务(WCF)生成的大量内容.

我过去曾经测试过这种东西(并且很容易找到),但是没有这种动态内容.

我正在使用Visual Studio 2008在.NET 3.5中进行开发.我设想在以下测试:

    TestDriven.NET

    MBUnit(这不是单元测试)

    某种控制浏览器的自动化工具(也许是Selenium,虽然它可能是SWEA或Watin.我在想IE,Firefox,可能还有Opera和Safari.)

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

使用等待相比,有更好的经验和做法.也许引入回调和函数式编程来运行测试?


注释1.在回顾前3个回复后的更多细节.

1)感谢艾伦,伊兰和马克西德,你的回复让我在赛道上得到答案,希望没有花太多时间.

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

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

3.1) Selenium Sample(这个和下一个,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,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,000", bot.GetSelectedLabel("MaxDropDownList"));
  Assert.AreEqual("$2,000,000", bot.GetSelectedLabel("MinDropDownList"));}

3.2) WatiN样本

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

3.3)如果你看一下这些看似明显相同的样本,你可以看到WatiN样本已经抽象出了等待.

3.4)但是,如http://watinandmore.blogspot.com/2008/01/using-watin-to-test-select-lists-in.html中所述,WatiN可能需要额外支持 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("Price").Click();
  HtmlSelect maxPrice = Find.ById("MaxDropDownList"); 
  HtmlSelect minPrice = Find.ById("MinDropDownList");
  maxPrice.SelectByText("$5,000,000"); 
  minPrice.SelectByText("$2,000,000");
  Find.ByContent("Prewar 8 Off Fifth Avenue").Click(); 
  ActiveBrowser.GoBack();
  Find.ByContent("Price").Click(); 
  maxPrice.AssertSelect().SelectedText("$5,000,000"); 
  minPrice.AssertSelect().SelectedText("$2,000,000");}

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

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有