9

現在、Web アプリケーションに C# を使用してコード化された UI テストの自動化を支援しようとしています。私がよく遭遇する問題は、UITestControlオブジェクトがページに存在するかどうかを判断するのが非常に難しいということです。残念ながら、コード化された UI テストに関する Microsoft の MSDN Web サイト上のドキュメントは、実質的に存在しません (こちらのページを参照してくださいUITestControl)。

基本的に私が求めているのは:

  • UITestControlページに が存在するかどうかを判断する最良の方法は何ですか?
  • UITestControl.Existsプロパティはどのように機能しますか?
  • メソッドは何をしUITestControl.Find()ますか?
  • UITestControl.TryFind()メソッドはどのように機能しますか?

私がそれを処理しようとした方法:

前述したように、これらすべてのクラスとメソッドに関するドキュメントはほとんど空白です。メソッドとプロパティを説明できるのは、Intellisense の 1 行の説明だけなので、リストされているメソッドを試してみました。

最初に、UITestControl.Existsプロパティが true かどうかを確認しようとしましたが、時間の経過とともに他のユーザーの経験を調べた結果、ブラウザーが開いていなくても、常に true を返すことが明らかになりました。最も明らかなオプションが機能していなかっUITestControl.Find()たので、メソッドを使用してみましたが、引数を取らず、何も返さないため、何をするのかわかりませんでした。メソッドを使用してUITestControl.TryFind()みましたが、時々うまくいきましたが、正しいページにいない場合にのみ false を返すように見えることがわかりました。それ以外の場合は常に true を返しました。明らかに、私はそれがどのように機能するのかわからなかったので、テストとして使用すべきではありません.

提供されたメソッドで仕事をすることができない場合は、独自のツールを作成する必要があると考えました。最近Mouse.Hover(UITestControl)、try/catch ブロックで使用して、コントロールが存在するかどうかを判断しようとしました。

public bool DoesExist(UITestControl control){
   if(control == null)
      return false;

   try{ Mouse.Hover(control); }
   catch (UITestException)
   {
      return false;
   }

   return true;
}

時々機能しますが、特定の状況では、理解できない理由で誤検知を返すようです。私はまだ盲目的に飛んでいて、ほとんどアイデアがありません。

Visual Studio 2012 と Microsoft .NET Framework バージョン 4.5.50709 を使用しています。

4

3 に答える 3

1

obj.Exists() を使用する代わりに、 EnsureClickable()BoundingRectangle.Width >0の組み合わせアプローチを使用して、コントロールにスクリーン ポイントがあることを確認する独自の exists メソッドをコーディングしました。

ETA-おっと、申し訳ありませんが重要な部分を省略しました。.Width を追加して 0 より大きいことを確認するように更新しました。幅が何らかの理由で機能しない場合は、長さを使用する必要がある場合があります。

于 2013-11-14T22:17:02.590 に答える