如何检测网页弹出的窗口并下"确定"?
打开网页后弹出的窗口如何检测出来,并模拟鼠标点下"确定"?找了很多资料都没有头绪,再次麻烦大家一下了,谢谢!
这个窗口如图:
相关信息:
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;
//利用反射机制调用私有方法,也就是按钮的Click方法
MethodInfo methodInfo = form1.GetType().GetMethod("button1_Click", flags, null, new Type[] { typeof(object), typeof(EventArgs) }, null);
//得到窗体的句柄
frmHandler = form1.Handle;
try
{
methodInfo.Invoke(form1, new object[] { null, null });
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
timer.Stop();
}
timer.Stop();
Assert.AreEqual(DialogResult.Yes, form1.DialogResult);
}
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
//取得消息框的句柄
IntPtr handler = GetWindow(frmHandler, (uint)GetWindowCmd.GW_ENABLEDPOPUP);//handler是MessageBox自己的句柄
if (handler != IntPtr.Zero)//不为零说明取得句柄成功
{
//取得消息框中的"是"按钮的句柄
handler = FindWindowEx(handler, 0, "Button", "是(&Y)");//按钮也作为了窗体处理,开始还真没想到可以这么用
//模拟点击按钮
SendMessage(handler, BM_CLICK, 0, 0);
}
}
catch { }
}
[DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true)]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, uint hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);
[DllImport("user32.dll", EntryPoint = "GetWindow", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr GetWindow(IntPtr hwnd, uint uCmd);
}