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

新窗口句柄在IE中消失分享

时间:2023-04-10 11:05:03 C#

新窗口句柄在IE中消失这是我之前在这里提出的问题的后续。在使用Selenium2.37.0之前,我在InternetExplorer10中切换窗口时遇到问题。我的C#程序将导航到一个页面,单击一个打开链接的按钮,然后尝试导航到一个新窗口以执行其他任务。我的程序一直失败,我确定这是因为Selenium的窗口句柄。打开一个新窗口后,窗口句柄的数量(driver.WindowHandles.Count)按预期从1增加到2,但一段时间后窗口句柄的数量下降到1。我创建了一个最小的示例网页来重现问题。只需将以下代码保存到桌面上名为test.aspx的文件中:这是我的C#代码(VisualStudio2010中称为TestWindowSwitching的控制台项目)打开此页面,单击按钮并打印一些输出:使用系统;使用系统线程;//睡眠需要使用System.Diagnostics;//使用OpenQA.Selenium的秒表需要;使用OpenQA.Selenium.IE;namespaceTestWindowSwitching{classProgram{staticvoidMain(){IWebDriverdriver=newInternetExplorerDriver();driver.Navigate().GoToUrl("C:\Users\yourNameHere\Desktop\test.aspx");尝试{driver.SwitchTo().DefaultContent();}赶上{线程。睡觉(10);}Console.WriteLine("初始窗口句柄数:"+driver.WindowHandles.Count);秒表sw=new秒表();尝试{driver.FindElement(By.Id("btn"))。点击();}catch{Thread.Sleep(10);}//等到窗口句柄数变为2while(driver.WindowHandles.Count!=2){//什么都不做}sw.Start();//等到窗口句柄数从2变为while(driver.WindowHandles.Count==2){//什么都不做g}Console.WriteLine("窗口句柄数下降到"+driver.WindowHandles.Count+"in"+sw.ElapsedMilliseconds+"ms");sw.停止();Console.Write("按回车键关闭...");控制台.ReadLine();驱动程序退出();以下是此代码的一些示例输出:窗口句柄的初始数量:1窗口句柄数量在59毫秒内下降到1按Enter关闭...我之前为此创建了一个解决方法,所以这实际上不是问题对我来说,我只是得到Javascript命令(在本例中为window.open('test.aspx'))并直接使用它导航到页面而不打开新窗口。然而,正如我在之前的帖子中提到的,我觉得其他人可能遇到过这个问题(示例1、示例2),所以如果这实际上是Selenium中的错误,则值得研究。或者,如果我做错了什么,欢迎提出建议。我相信我可能已经找到了解决方案。我进入IE->Internet选项->高级->重置InternetExplorer设置。这样做并重新启动后,我不再有窗口切换问题。我不确定这是为什么,因为我几乎不使用IE;我无法想象我更改了任何重要设置。一路上,我注意到一些可能相关的问题。为了绝对透明,我会陈述我所做的一切。重置我的设置后,当我第一次打开IE时,我回答了几个对话框。首先,我单击“使用推荐的安全性和兼容性设置”和“确定”。然后,在“您希望InternetExplorer成为默认浏览器吗?”下,我单击“否”和“不再询问”。最后,对于“Severaladd-onsareready”,我点击了“Don'tenable”。然后当我尝试使用64位驱动程序运行程序时。(我假设我的IE是64位的,因为在开始菜单中,程序位于C:ProgramFiles-而不是像我的其他一些程序那样的C:ProgramFiles(x86)。)它在IWebDriverdriver=newInternetExplorerDriver();行崩溃.错误如下:InvalidOperationExceptionwasunhandled启动InternetExplorer时出现意外错误。所有地区的保护模式设置都不相同。必须为所有区域将启用保护模式设置为相同的值(启用或禁用)。(NoSuchDriver)为了解决这个问题,我进入IE->Internet选项->安全并在所有四个区域中选中“启用保护模式”。这修复了它;当我运行我的程序时,我不再有错误。这个问题(IE驱动程序无法使用IE10的默认设置)可能值得记录。更改这些设置后,我的程序可以运行-但速度非常慢。将六个字符长的字符串输入两个文本框实际上需要60秒。然后我切换到32位驱动程序(尽管有64位IE)并且它以正常速度运行。最后,我继续运行我的程序,它不再丢失窗口句柄。总结一下:如果您遇到IE驱动程序丢弃窗口句柄的问题,请考虑重置您的IE设置。这似乎已经为我解决了。以上就是C#学习教程的全部内容:新窗口句柄在IE中消失。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: