如何处理当前的浏览器窗口
本文关键字:浏览器 窗口 何处理 处理 | 更新日期: 2023-09-27 18:33:42
我正在创建多个 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);
}
}
我不确定 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
实例,则会引发异常。我决定捕获异常并启动 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);
}
}