10

私はまもなく、Webサービス(WCF)から生成された多くのコンテンツを含むAJAX駆動型のWebページに取り組んでいます。

私は過去にこの種のことをテストしましたが(そしてそれは簡単であることがわかりました)、このレベルの動的コンテンツではテストしませんでした。

Visual Studio2008を使用して.NET3.5で開発しています。このテストは、次の場所で行うことを想定しています。

  1. TestDriven.NET
  2. MBUnit(これはユニットテストではありませんが)
  3. ブラウザを制御するためのある種の自動化ツール(おそらくSeleniumですが、SWEAまたはWatinかもしれません。IE、Firefox、そしておそらくOperaとSafariを考えています)。

以前は、ブラウザをテストするときに遅延を使用していました。私はそれをするのが特に好きではなく、それは時間を無駄にします。

待機を使用するよりも、物事をより良く行うためにどのような経験と実践がありますか。たぶん、テストを実行するためのコールバックとプログラミングの機能的なスタイルを導入しますか?


注1.最初の3つの返信を確認した後の詳細。

1)Alan、Eran、marxidadに感謝します。あなたの返事は、うまくいけばあまり時間をかけずに、私の答えを得る道に私を導いてくれました。

2)もう1つの詳細は、jQueryを使用してAjaxを実行しているため、これはAsp.NETAJAXに組み込まれていません。

3)状況をうまく説明している記事を見つけました。http://adamesterline.com/2007/04/23/watin-watir-and-selenium-reviewed/からです

3.1) Seleniumサンプル(これと次のWatiNのコードサンプルは元のWebページ(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サンプルコードのより完全なソースを取得しようとしました。残念ながら、それはもう利用できません、リンクは死んでいます。そうしていると、おそらくWebページと自動化ツールの間でマッピングされるモデルである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,000"); 
  minPrice.SelectByText("$2,000,000");
  Find.ByContent<HtmlAnchor>("Prewar 8 Off Fifth Avenue").Click(); 
  ActiveBrowser.GoBack();
  Find.ByContent<HtmlAnchor>("Price").Click(); 
  maxPrice.AssertSelect().SelectedText("$5,000,000"); 
  minPrice.AssertSelect().SelectedText("$2,000,000");}

6)コードから、いくつかのフレームワークで待機と遅延を明確に回避できますが、WatiNが自分に適しているかどうかを確認するためにより多くの時間を費やす必要があります。

4

2 に答える 2

2

ほとんどの自動化フレームワークには、いくつかの同期関数が組み込まれています。Selenium も例外ではなく、waitForText、waitForElementPresent などの機能が含まれています。

上記の「待機」について言及したことに気づきましたが、これはスリープ (自動化には適していません) と解釈しました。私の解釈が間違っていた場合はお知らせください。wait* 関数または代替手段について詳しく説明できます。

于 2008-09-26T03:10:09.720 に答える
0

WebAiiには、待機する要素のパラメーターを指定できるWaitForElement(s)メソッドがあります。

于 2008-09-26T03:19:42.770 に答える