当前位置: 首页 > 编程语言 > C#

如何用Watin-IE9测试文件下载?分享

时间:2023-04-10 10:39:00 C#

Watin/IE9如何测试文件下载?我正在尝试使用Watin2.1.0测试针对IE9的文件下载。我使用了问题DownloadingfilesusingWatininIE9的已接受答案中的建议代码,如下所示:vardownloadHandler=newFileDownloadHandler(fname);WebBrowser.Current.AddDialogHandler(downloadHandler);链接.ClickNoWait();下载处理程序。WaitUntilFileDownloadDialogIsHandled(15);downloadHandler.WaitUntilDownloadCompleted(200);但是,downloadHandler.WaitUntilFileDownloadDialogIsHandled(15)调用超时。我该怎么办?IE9不再使用对话窗口来保存文件。相反,它使用通知栏来防止焦点从网站上移开。请参阅“下载管理器”下的http://msdn.microsoft.com/en-us/ie/ff959805.aspx以供参考。不幸的是,这意味着当前WatiN中的FileDownloadHandler将无法工作。它为每个浏览器实例实例化一个“DialogWatcher”类,它是任何类型子窗口的基本消息泵。当遇到子窗口时,DialogWatcher会检查该窗口是否为特定对话框(通知栏不是)。如果是对话框,它会遍历已注册的IDialogHandler实例并调用“CanHandleDialog”。尽管通知栏是对话框,但它是不同的窗口样式(http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx),是WatiN如何检测对话类型。据我所知,WatiN中还不支持检测IE9通知栏及其提示。在添加该支持之前,您将无法在IE9中自动下载文件。文件下载对话框在IE9(Windows7)NetFramework4.0中不起作用。下面的代码片段可以帮助您解决这个问题:首先,您必须将引用UIAutomationClient和UIAutomationTypes添加到您的测试项目中。在Ie9工具->查看下载->选项定义保存文件夹的路径。下一个方法扩展了浏览器类publicstaticvoidDownloadIEFile(thisBrowserbrowser){//在这里查看信息(http://msdn.microsoft.com/en-us/library/windows/desktop/ms633515(v=vs.85).aspx)WindowwindowMain=newWindow(WatiN.Core.Native.Windows.NativeMethods.GetWindow(browser.hWnd,5));System.Windows.Automation.TreeWalkertrw=newSystem.Windows.Automation.TreeWalker(System.Windows.Automation.Condition.TrueCondition);System.Windows.Automation.AutomationElementmainWindow=trw.GetParent(System.Windows.Automation.AutomationElement.FromHandle(browser.hWnd));窗口windowDialog=newWindow(WatiN.Core.Native.Windows.NativeMethods.GetWindow(windowMain.Hwnd,5));//如果不起作用尝试增加睡眠间隔或编写自己的waitUntill方法Thread.Sleep(1000);windowDialog.SetActivate();System.Windows.Automation.AutomationElementCollectionamc=System.Windows.Automation.AutomationElement.FromHandle(windowDialog.Hwnd).FindAll(System.Windows.Automation.TreeScope.Children,System.Windows.Automation.Condition.TrueCondition);foreach(System.Windows.Automation.AutomationElementelementinamc){//您可以使用“保存”、“打开”、“取消”或“关闭”来查找必要的按钮或者编写您自己的枚举if(element.Current.Name.Equals("Save")){//如果不起作用尝试增加睡眠间隔或编写自己的waitUntil方法//WaitUntilButtonExsist(element,100);线程.睡眠(1000);System.Windows.Automation.AutomationPattern[]pats=element.GetSupportedPatterns();//如果您需要“另存为”,请将此foreach替换为下面的代码foreach(System.Windows.Automation.AutomationPatternpatinpats){//'10000'按钮单击事件IDif(pat.Id==10000){System.Windows.Automation.InvokePattern点击=(System.Windows.Automation.InvokePattern)element.GetCurrentPattern(pat);点击.Invoke();}}}}}如果您想要点击“另存为”,请使用此替换foreach代码System.Windows.Automation.AutomationElementCollectionbmc=element.Find所有(System.Windows.Automation.TreeScope.Children,System.Windows.Automation.Automation.ControlViewCondition);System.Windows.Automation.InvokePatternclick1=(System.Windows.Automation.InvokePattern)bmc[0].GetCurrentPattern(System.Windows.Automation.AutomationPattern.LookupById(10000));click1.Invoke();线程.睡眠(10000);System.Windows.Automation.AutomationElementCollectionmain=mainWindow.FindAll(System.Windows.Automation.TreeScope.Children,System.Windows.Automation.Condition.TrueCondition);foreach(System.Windows.Automation.AutomationElementelinmain){if(el.Current.LocalizedControlType=="menu"){//第一个数组元素'保存',第二个数组元素'另存为',第三个第二个数组元素'保存并打开“System.Windows.Automation.InvokePatternclickMenu=(System.Windows.Automation.InvokePattern)el.FindAll(System.Windows.Automation.TreeScope.Children,System.Windows.Automation.Condition.TrueCondition)[1]。GetCurrentPattern(System.Windows.Automation.AutomationPattern.LookupById(10000));点击菜单.Invoke();//如果需要,在这里添加ControlSaveDialog(mainWindow,filename)break;编辑:此外,如果您需要自动执行指定路径的保存对话框并单击“保存”,您可以通过在中断前添加此代码来实现;以上是C#学习教程:HowtotestfiledownloadwithWatin/IE9?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——privatestaticvoidControlSaveDialog(System.Windows.Automation.AutomationElementmainWindow,stringpath){//获取另存为对话框varsaveAsDialog=mainWindow.FindFirst(TreeScope.Descendants,newPropertyCondition(AutomationElement.NameProperty,"SaveAs"));//获取文件名框varsaveAsText=saveAsDialog.FindFirst(TreeScope.Descendants,newAndCondition(newPropertyCondition(AutomationElement.NameProperty,"Filename:"),newPropertyCondition(AutomationElement.ControlTypeProperty,ControlType.Edit))).GetCurrentPattern(ValuePattern.Pattern)作为ValuePattern;//填充文件名框saveAsText.SetValue(path);线程.睡眠(1000);//找到保存按钮varsaveButton=saveAsDialog.FindFirst(TreeScope.Descendants,newAndCondition(newPropertyCondition(AutomationElement.NameProperty,"Save"),newPropertyCondition(AutomationElement.ControlTypeProperty,ControlType.Button)));//调用按钮varpattern=saveButton.GetCurrentPattern(InvokePattern.Pattern)作为InvokePattern;模式。调用();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: