如何处理当前的BrowserWindow

时间:2012-05-09 15:01:32

标签: c# coded-ui-tests

我正在创建多个UI测试而不是打开Microsoft.VisualStudio.TestTools.UITesting.BrowserWindow的新实例我想检查一下BrowserWindow对象是否已经可用 - 这意味着IE已在主机上打开 - 并且得到它的句柄。我发现这个question但是我希望我的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);
    }
}

2 个答案:

答案 0 :(得分: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);

我希望这会有所帮助。

克里斯

答案 1 :(得分:0)

如果在调用BrowserWindow方法时尚未启动NavigateToUrl()实例,则抛出异常。我决定捕获异常并启动网址,否则一旦BrowserWindow启动,只需致电NavigateToUrl()。这有效但在捕获异常时第一个测试方法需要很长时间。如果提供更好的解决方案,我会重新分配答案......

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