2

最近、コード化された UI テストを使用して Windows アプリケーションの自動化を開始しましたが、MSAA コントロールの一部にアクセスしているときに問題に直面しています。自動化を手作業でコーディングしていますが、コントロールを UI マップに追加してから使用したくありません。

私が立ち往生したコントロールは、マシンを選択する左側のペインの treeItem であり、中央の残りのクライアント領域に詳細が表示されます。

UI コントロールに十字線で示されているプロパティを使用してコントロールを検索しようとしましたが、無駄でした。

以下は私が試したコードです -

UITestControl machine = new UITestControl(App);
        machine.TechnologyName = "MSAA";
        machine.SearchProperties.Add(WinTreeItem.PropertyNames.ControlType,     "TreeItem");
        machine.SearchProperties.Add(WinTreeItem.PropertyNames.Name, "Machine1");
        machine.SearchProperties.Add(WinTreeItem.PropertyNames.ControlName, "m_tvPlantStructureView");
Mouse.Click(machine); // This code gives an error

エラー-

Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: 再生で、指定された検索プロパティを持つコントロールが見つかりませんでした。追加の詳細: TechnologyName: 'MSAA' ControlType: 'TreeItem' Name: 'Machine1' ControlName: 'm_tvPlantStructureView' ---> System.Runtime.InteropServices.COMException: COM コンポーネントの呼び出しからエラー HRESULT E_FAIL が返されました。

添付ファイルを参照してください。何が問題で、将来認識されないようなコントロールのエラーを完全に回避するためには、どのようなプロセスに従うべきか教えてください.

現在、私はクロスヘアを実行してプロパティを取得し、コントロールのそのプロパティをコーディングして、ユーザーのアクションとアサーションを自動化する方法に従っています。しかし、この方法は常に機能するとは限りません。

それを行うより良い方法があれば教えてください。

4

2 に答える 2

0

階層検索を行う必要があります。2 つのコントロールを作成します。最初に Treeview を Window として作成します。コントロール名 m_tvPlantStructureView を使用して、Machine1 という名前の新しい TreeItem を作成します。

var treeView = new WinWindow(App);
treeView.SearchProperties.Add(WinWindow.PropertyNames.ControlName, "m_tvPlantStructureView");

var machine= new WinTreeItem(treeView);
machine.SearchProperties.Add(WinTreeItem.PropertyNames.Name, "Machine1");

Mouse.Click(machine); // This code gives an error

これが失敗した場合の別の方法は、ツリービューからアプリを削除し、ウィンドウ タイトルを追加することです。

ご不明な点がございましたら、お知らせください。

var treeView = new WinWindow();
treeView.WindowTitles.Add("mywindowname");
treeView.SearchProperties.Add(WinWindow.PropertyNames.ControlName, "m_tvPlantStructureView");

var machine= new WinTreeItem(treeView);
machine.SearchProperties.Add(WinTreeItem.PropertyNames.Name, "Machine1");

Mouse.Click(machine); // This code gives an error
于 2014-06-26T15:13:37.990 に答える