1

テスト ケースを自動化するために、codedUI を使用しています。また、当社の開発者は Telerik による Kendo UI コントロールを使用しています。ユニークな名前のコントロールでの録音と再生に問題はありません。しかし、同じドキュメントに動的にレンダリングされ、一意の識別子として名前しか持たないコントロールはほとんどなく、html は自動的に作成され、開発者は名前を変更したり、その html に id を追加したりすることはできません。したがって、名前には GUID が自動的に追加され、この GUID はほとんどの場合、テスト ケースの実行時に変更されます。名前フィールドで代わりにコントロールを使用してみましたが、GUID が名前の途中にあるため、使用するのは非常に困難です。たとえば、「Courses[138a47d6-8313-4df4-b39f-caeffd0aecf2].ExternalCoatingId_input」と「一意の検索基準として機能しない (ExternalCoatingId_input)) を含みます。実際に必要なのは、「Courses_ExternalCoatingId_input_GUID」のような名前または ID です。私の開発者は私の問題を理解し、私が要求した形式で ID を追加しましたが、自動生成された html を制御できないため、上記の名前の実際のコントロールにリンクされた隠しコントロールを作成し、それに ID を追加しました。以下は、その種類のコントロールのサンプル HTML コードです。一意の検索基準として機能しない (ExternalCoatingId_input)) を含みます。実際に必要なのは、「Courses_ExternalCoatingId_input_GUID」のような名前または ID です。私の開発者は私の問題を理解し、私が要求した形式で ID を追加しましたが、自動生成された html を制御できないため、上記の名前の実際のコントロールにリンクされた隠しコントロールを作成し、それに ID を追加しました。以下は、その種類のコントロールのサンプル HTML コードです。上記の名前の実際のコントロールにリンクされた隠しコントロールを作成し、ID を追加しました。以下は、その種類のコントロールのサンプル HTML コードです。上記の名前の実際のコントロールにリンクされた隠しコントロールを作成し、ID を追加しました。以下は、その種類のコントロールのサンプル HTML コードです。

" span class="k-widget k-combobox k-header" style="width: 220px;" span class="k-dropdown-wrap k-state-default" unselectable="on" tabindex="-1"> input class="k-input" type="text" autocomplete="off" name="Courses[138a47d6-8313-4df4-b39f-caeffd0aecf2].ExternalCoatingId_input" style="width: 100%;" role="combobox" aria-expanded="false" placeholder="Select External Coating ..." tabindex="0" aria-disabled="false" aria-readonly="false" aria-autocomplete="both" aria-owns="tank- component-external-coating-Course-a490312e-c9f5-494a-8d3f-3ccdc33f7660_listbox" aria-activedescendant="タンク-コンポーネント-外部コーティング-コース-a490312e-c9f5-494a-8d3f-3ccdc33f7660_option_selected" aria-busy="false">

span class="k-select" unselectable="on" tabindex="-1"> スパン

input id="tank-component-external-coating-Course-a490312e-c9f5-494a-8d3f-3ccdc33f7660" type="text" style="width: 220px; display: none;" name="Courses[138a47d6-8313-4df4-b39f-caeffd0aecf2].ExternalCoatingId" data-val-number="フィールド ExternalCoatingId は数値でなければなりません。" data-val="true" data-role="combobox" aria-disabled="false" aria-readonly="false"

スパン "

しかし、そのコントロールの UImap.uitest にこの ID を追加してテストを再生しようとすると、"{"非表示のコントロールで「クリック」を実行できないというエラーが表示されます。追加の詳細: \r\nTechnologyName: 'Web'\r\nControlType: 'Edit'\r\nTagName: 'INPUT'\r\nId: 'tank-component-external-coating-roof-7341237e-a359-4fb9-b9a3 -29a282c44480'\r\nName: 'Roofs[4400736d-2a50-40ae-87f2-41acdf200e1f].ExternalCoatingId'\r\n"}" Visual Studio 2012 Premium と Windows 8 OS および IE 10 を使用しています

問題の非常に詳細な説明をお詫びしますが、この特定のフォーラムでヘルプを見つけることができませんでした. 「非表示のコントロールをクリックできない」について議論しているフォーラムスレッドはほとんど見つかりませんでしたが、私の問題とはまったく関係ありません。非表示のコントロール ID を使用してテスト ケースを正常に実行する方法について、ご意見をお聞かせください。

ありがとう、ラジ

4

2 に答える 2

1

非表示のコントロールを使用するのではなく、実際のコントロールに焦点を当てることを検討します。私が試みる方法は、 で検索プロパティを指定し、Contains(ExternalCoatingId_input)のフィルタ プロパティを追加することですContains(Courses)。それで十分かもしれません。そうでない場合は、見つかったすべてのコントロールでFindMatchingControls()を返す which を使用してみてください。UIControlCollection次に、コレクションを検索して必要なコントロールを見つけることができます。質問には、これらの他の検索基準が何であるかは示されていません。

于 2013-10-30T20:39:12.373 に答える
0

2つの解決策が思い浮かびます。

1 つ目は、非表示のコントロールの場所をクリックして実行する方法です。これは、コントロールの境界四角形を取得してクリックすることで実行されます。

Mouse.Click(new System.Drawing.Point(hiddenControl.BoundingRectangle.X + 5, hiddenControl.BoundingRectangle.Y + 5));

コントロールをクリックする場合は問題ありませんが、それがドロップダウン リストまたはその他のものであり、クリック以外のことをしたい場合は、コントロール自体が必要です。その場合、非表示のコントロールと、実際のコントロールの別の例の親ではない実際のコントロールの両方の共通の親を見つける必要があります。

たとえば、非表示のコントロール ( と呼びますhiddenControl) とドロップダウン リスト ( と呼びます) があるとしますnoIDList。さらに、両方が同じ に含まれているとしましょうHtmlSpanhiddenControl最初に、 ID を使用して、他のコントロールと同じように UI マップを設定します。次に、UIMap で宣言するときに、その親をメソッドを使用しているnoIDListのと同じ親に絞り込むことができます。方法は次のとおりです。hiddenControlGetParent()

public HtmlComboBox noIDList
{
  get
  {
    //This returns the first combo box that is a child of hidden control's parent
    //So, the first combo box that is a sibling of hidden control
    return new HtmlComboBox(hiddenControl.GetParent());
  }
}

明らかに、これには非表示コントロールとコンボ ボックスの両方が親を共有し、その親に他のすべての非表示コントロールとコンボ ボックスが含まれていないことが必要です。乾杯と幸運を!

于 2013-10-31T14:18:00.397 に答える