2012-05-09 14 views
1

複数のUIテストを作成し、Microsoft.VisualStudio.TestTools.UITesting.BrowserWindowの新しいインスタンスを開く代わりに、BrowserWindowオブジェクトが既に利用可能かどうかを確認したいと思います。つまり、IEはすでにホスト上で開いています。マシン - それにハンドルを取得します。私はこのquestionを見つけましたが、BrowserWindowラッパークラスでハンドルを取得し、クラスの初期化時に再生が既に初期化されているので、推奨されたメソッドが機能しません。現在のBrowserWindowでハンドルを取得する方法

これは私の既存のコードです...私はそれが働いて持って

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

EDIT は、それは理想的ではないのですが、それは動作します。より良い方法がありますか?

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

答えて

0

例外がスローされます。私は例外をキャッチし、そうでなければ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); 
    } 
} 
0

私はBrowserWindowオブジェクトについてはよく分からないんだけど、あなたは、特定のアプリケーションが実行されているかどうかを調べたり、特定のウィンドウのハンドルを取得したい場合、あなたは、Win32 APIを使用することができます。ここで

/* 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); 

私はこのことができます願っています。 NavigateToUrl()メソッドが呼び出されたときにBrowserWindowインスタンスが起動されていない場合

クリス

関連する問題