2

複数のUIテストを作成していて、の新しいインスタンスを開く代わりにMicrosoft.VisualStudio.TestTools.UITesting.BrowserWindow、BrowserWindowオブジェクトがすでに利用可能かどうか(つまり、IEがホストマシンですでに開いているかどうか)を確認し、そのハンドルを取得します。この質問を見つけましたが、BrowserWindowラッパークラスにハンドルを取得させたいのですが、クラスの初期化の時点で再生がすでに初期化されているため、提案されたメソッドは機能しません。

これは私の既存のコードです...

public class uiBrowserWindow : BrowserWindow {
    public static void launchUrl(string url) {
        Launch(url);
    }
}

編集 私はそれを機能させました、それは理想的ではありませんが、それは機能します。もっと良い方法はありますか?

public class uiBrowserWindow : BrowserWindow {
    public void launchUrl(string url) {
        try {
            SearchProperties[PropertyNames.ClassName] = "IEFrame";
            NavigateToUrl(new Uri(url));
        } catch (Exception) {
            Launch(url);
    }
}
4

2 に答える 2

0

BrowserWindowオブジェクトについてはよくわかりませんが、特定のアプリケーションが実行されているかどうかを確認したり、特定のウィンドウでハンドルを取得したりする場合は、WIN32APIを使用できます。

/* Create a Win32.Win32Api Helper class, or include in your class  */
[DllImport("User32.dll")]
public static extern Int32 FindWindow(String lpClassName, String lpWindowName);
[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(int hWnd);
[DllImport("User32.dll")]
public static extern Int32 SendMessage(int hWnd, UInt32 msg, int wParam, int lParam);

特定のプロセスをフェッチし、APIを介してメッセージを送信するサンプルを次に示します。

int ieWindow = Win32.Win32API.FindWindow(null, "C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe");
Win32.Win32API.SetForegroundWindow(ieWindow);

// Example sending message, Right Mouse Button Up message (0x0205)
Win32.Win32API.SendMessage(ieWindow, 0x0205, 0, 0);

これがお役に立てば幸いです。

クリス

于 2012-05-09T15:52:01.623 に答える
0

メソッドが呼び出されBrowserWindowたときにインスタンスが起動されていない場合は、例外がスローされます。NavigateToUrl()例外をキャッチしてURLを起動することにしました。それ以外の場合BrowserWindowは、起動したらを呼び出すだけNavigateToUrl()です。これは機能しますが、例外をキャッチするときに最初のテストメソッドで時間がかかりすぎます。より良い解決策が提供されたら、答えを再割り当てします...

public class uiBrowserWindow : BrowserWindow {
    public void launchUrl(string url) {
        try {
            SearchProperties[PropertyNames.ClassName] = "IEFrame";
            NavigateToUrl(new Uri(url));
        } catch (Exception) {
            Launch(url);
    }
}
于 2012-05-10T12:50:15.117 に答える