2011-09-15 16 views
3

私はWatiNを使ってオートコンプリートドロップをテストしています。オートコンプリートドロップダウンメニューWatiNを使用したテスト

3文字が入力された後にユーザーがフィールドに入力すると、jqueryのオートコンプリートがトリガーされ、順序付けられていないリストが表示されます。ユーザーがリストから選択することは必須です。

WatiNを使用してリストからオートコンプリートを選択/トリガーすることができません。ここで

は、開発者が使用しているHTMLの一部です:

<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all" role="listbox" aria-activedescendant="ui-active-menuitem" style="z-index: 1; display: block; width: 275px; top: 301px; left: 262px; "> 
<li class="ui-menu-item" role="menuitem"><a class="ui-corner-all" tabindex="-1">ABC DEFGHIJ </a></li> 
<li class="ui-menu-item" role="menuitem"><a class="ui-corner-all" tabindex="-1">ABC KLMNOPQ </a></li> 
</ul> 

彼らはjQueryのUIのオートコンプリートウィジェットを使用している:jQueryのUIのオートコンプリートのテストのためにグーグルでhttp://jqueryui.com/demos/autocomplete/

、私はこのスタックオーバーフローQ &ましたA: Testing JQuery autocomplete ui with cucumber

重要な情報であると思われる内容が含まれています。「最初にマウスオーバーしてからクリックする必要があります」

は、その後、私はWatiNのマウスオーバーためにGoogleで検索し、これには、少しのコードサンプルありhttp://blogs.telerik.com/testing/posts/08-05-29/how_to_select_radcombobox_item_with_watin.aspx が見つかりました:

Div divStudent3 = ie.Div(Find.ById("idRadComboBox_c2")); 
    divStudent3.FireEvent("onmouseover"); 
    divStudent3.Click(); 

を(我々の開発コードは、これは単なる一例である制御telerik使用していない明確にする)

フィールドに

  1. 目標値の一部を入力し(例:私はこれを駆動する方法のための計画を持っていたと思った。この時点で

    「ABC」)

  2. は、そのテキストを希望する値(例えばある<li>要素を見つけ、それがその<ul>要素内
  3. 存在するまで待機し、 <ul>クラス「UI-オートコンプリート」を持つ要素の表示スタイルと「ブロック」を検索します「ABC DEFGHIJ」)
  4. 火その<li>要素
  5. の「のonmouseover」イベントが<li>要素をクリックします。

私は2つの問題を発見した:まず、入力フィールドにWatiNのタイピングがメニュー項目をクリックすると、オートコンプリートが発生する原因となっていないことを第二に 、オートコンプリートメニューの外観をトリガで非常に悪かったとこと。

入力フィールドにダウンローキーイベントを送信するとメニューが表示されるようになりましたが、トップメニュー項目は にハイライト表示されませんでした(手動で入力して下矢印キーを押した場合)。 (IDをui-active-menuitemに設定することを含む)を正しく起動すると、ここにリンクがない可能性があります。

誰も私が言及した2つの問題を理解し解決するのに役立つことができますか?

答えて

2

これはビットを取ったが、ここでの実施例です。

キーポイント

  • コールjQueryオブジェクト検索方法。これにより、ドロップダウンリスト が表示されます。
  • 火災onmouseoverあなたが望むアイテム。
  • 次に、必要な項目をクリックします。

アイテムを正しく選択するには、上記3つのすべてを特定の順序で実行する必要があります。

コード

string searchValue = "c"; 
string selectItem = "COBOL"; 

ie.GoTo("http://jqueryui.com/demos/autocomplete/default.html"); 

ie.TextField("tags").TypeText(searchValue); 
ie.Eval(@"$('#tags').autocomplete('search')"); 
ie.List(Find.ByClass("ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all")).ListItem(Find.ByText(selectItem)).Links[0].FireEvent("onmouseover"); 
ie.List(Find.ByClass("ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all")).ListItem(Find.ByText(selectItem)).Links[0].Click(); 

Watin 2.1を使用して上記の作品。 WatiN 2.0 RCでは動作しません。私は実際の2.0リリースをチェックしなかった。 2.0 RCには、ListオブジェクトとListItemオブジェクトはありません。 IE8でのみテストされています。

+0

これが問題を解決しました。ありがとうございました。それはそれを選択しているときにリストの項目のハイライトを表示しません(これについてさらに詳しく見ていきます)が、項目を正しく選択しています:) – ghb82

+0

さらに詳しい情報はhttp: /forum.jquery.com/topic/functional-testing-autocomplete-widget-with-watin-watir。また、TextFieldでjqueryを使ってぼかしを行うと、これも機能します(実際にはリストは表示されませんので、これは必要でない可能性があります) – Mark

+0

が私の問題を解決しました。ありがとう – AceMark

0

私がテストしているアプリケーションでも同様の問題が発生しました。 TypeTextを使ってテキストフィールドに入力すると、文字は2回タイプされます。

私たちがしたことは以下の通りです。DataValueはがテキストフィールドおよび値への参照がキー入力されるべき値である

string mySubStr = value.Substring(0, value.Length - 3); 
datavalue.Value = mySubStr; 
datavalue.AppendText(value.Substring(value.Length - 3, 3)); 
Thread.Sleep(500); 
datavalue.KeyDown((char)System.Windows.Forms.Keys.Down); 
datavalue.KeyDown((char)System.Windows.Forms.Keys.Enter); 

関連する問題