2

Visual Studio 2010 プロジェクトで WinForm の単体テストを作成しようとしています。新しい "コード化された UI テスト" をプロジェクトに追加し、コード ファイルを開き、右クリックして [コード化された UI テストのコードを生成] -> [コード化された UI テスト ビルダーを使用] を選択します。次に、アプリケーションを起動し、UI マップ コントロールで [記録] を選択します。テストを実行します (この場合は、テキスト ボックスを選択し、ランダムな値を入力して、ボタンをクリックするだけです)。次に、テストで使用するコードを生成する UI マップ コントロールから [コードの生成] を選択します。このテストを実行すると、次のエラーが表示されます。

テスト メソッド HelloWorldTest.CodedUITest1.CodedUITestMethod1 が例外をスローしました: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: 再生は、指定された検索プロパティを持つコントロールを見つけることができませんでした。追加の詳細: TechnologyName: 'MSAA' ControlType: 'Window' Name: 'Form1' ClassName: 'WindowsForms10.Window' ---> System.Runtime.InteropServices.COMException: COM コンポーネントへの呼び出しからエラー HRESULT E_FAIL が返されました.

誰かが私が間違っている場所を知っていますか?

ありがとう

4

1 に答える 1

1

あなたの問題はウィンドウのタイトルにあると思います。アプリケーションで生成された新しいウィンドウごとに、Visual Studio によってウィンドウ タイトルが付けられることがわかります。テストを記録したとき、ウィンドウのタイトルは「Form1」でした。エラーメッセージには次のように書かれています:

ControlType: 'ウィンドウ' 名前: 'Form1'

したがって、新しいウィンドウが開かれるたびにアプリケーションがウィンドウの名前を変更するかどうかを判断する必要があります (ほとんどの場合そうです)。たとえば、2 番目のウィンドウを開くと、"Form2" という名前になることがあります。

コード化された ui テストが適切に機能するには、アクションを実行する特定のコントロールを探す場所を知る必要があります。したがって、「テキストボックスを選択し、ランダムな値を入力し、ボタンをクリックする」ことができるようにするには、ウィンドウのタイトルを知る必要があります。

この問題を解決するために私が見つけた唯一の方法は、ウィンドウのタイトルが変更された、または変更されることがわかっている場合、ウィンドウのタイトルを手動で設定することです。

this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Clear();
this.UIMap.UIHighCapitalFranchiseWindow.UIHighCapitalFranchiseDocument.UICtl00ContentPlaceHolComboBox.WindowTitles.Add("Franchises for Sale");

ご覧のとおり、コントロールの WindowTitles プロパティのすべての値をクリアしてから、正しいタイトルを追加しています。上記の例では、次のように構成されています。

this.(uimap ファイルの名前).(ウィンドウの名前).(ウィンドウ内のドキュメントの名前).(特定のコントロールの名前 (コンボ ボックス、ラジオ ボタン、テキスト ボックスなど)).WindowTitles.(クリアまたは追加)();

このコードは、コード化された ui テスト ファイルで直接使用できます。または、部分クラス UIMap.cs (自動生成されていないもの、UIMap.Designer.cs は自動生成されたもの) を使用して UIMap を変更することもできます。 . 後者を選択した場合は、「.UIMap」を削除することを忘れないでください。

于 2011-04-26T20:28:15.143 に答える