Dan*_*les 5 c# selenium internet-explorer
这是我在此处提出的上一个问题的后续措施。
我以前在使用Selenium 2.37.0的Internet Explorer 10中切换窗口时遇到问题。我的C#程序将导航到页面,单击打开链接的按钮,然后尝试导航到新窗口以执行其他任务。我的程序不断失败,我确定这是由于Selenium的窗口句柄造成的。打开新窗口后,窗口句柄(driver.WindowHandles.Count)的数量从1增加到2,正如预期的那样,但是经过一段时间后,窗口句柄的数量又下降到1。
我创建了一个最小的示例网页来重现此问题。只需将以下代码保存到test.aspx桌面上的文件中:
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<input id="btn" type="button" value="Link" lang="javascript" onclick="window.open('test.aspx')">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是我的C#代码(Visual Studio 2010中的控制台项目,称为TestWindowSwitching),打开此页面,单击按钮,并输出一些输出:
using System;
using System.Threading; // Needed for Sleep
using System.Diagnostics; // Needed for Stopwatch
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
namespace TestWindowSwitching
{
class Program
{
static void Main()
{
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("C:\\Users\\yourNameHere\\Desktop\\test.aspx");
try { driver.SwitchTo().DefaultContent(); }
catch { Thread.Sleep(10); }
Console.WriteLine("Initial number of window handles: " + driver.WindowHandles.Count);
Stopwatch sw = new Stopwatch();
try { driver.FindElement(By.Id("btn")).Click(); }
catch { Thread.Sleep(10); }
// Wait until number of window handles becomes 2
while (driver.WindowHandles.Count != 2)
{
// Do nothing
}
sw.Start();
// Wait until number of window handles changes from 2
while (driver.WindowHandles.Count == 2)
{
// Do nothing
}
Console.WriteLine("Number of window handles has dropped to " + driver.WindowHandles.Count
+ " in " + sw.ElapsedMilliseconds + " ms");
sw.Stop();
Console.Write("Press Enter to close...");
Console.ReadLine();
driver.Quit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是该代码的一些示例输出:
初始窗口句柄数:1
窗口句柄数在59毫秒内下降到1
按Enter键关闭...
我以前为此创建了一种解决方法,因此实际上这对我而言不再是问题。我只是获取了Javascript命令(在本例中为window.open('test.aspx')),并直接使用它导航到页面而无需打开新窗口。
但是,正如我在上一篇文章中提到的那样,我认为其他人可能也遇到过此问题(示例1,示例2),因此,如果这实际上是Selenium中的错误,则值得进行研究。或者,如果我做错了,欢迎提出建议。
我相信我可能已经找到了解决方案。我进入 IE -> Internet 选项 -> 高级 -> 重置 Internet Explorer 设置。执行此操作并重新启动后,我不再遇到窗口切换问题。我不知道为什么会发生这种情况,因为我几乎不使用 IE;我无法想象我更改了任何重要设置。
在这个过程中,我注意到一些可能相关的问题。为了绝对透明,我将陈述我所做的一切。
重置设置后,当我第一次打开 IE 时,我回答了几个对话框。首先,我单击“使用推荐的安全和兼容性设置”和“确定”。然后,在“您希望将 Internet Explorer 设置为默认浏览器吗?”下,我单击“否”和“不再询问”。最后,对于“几个附加组件已准备好使用”,我单击了“不启用”。
然后,当我尝试使用 64 位驱动程序运行程序时。(我假设我的 IE 是 64 位的,因为在“开始”菜单中,该程序位于C:\Program Files\-C:\Program Files (x86)\不像我的其他一些程序那样。)它会在线崩溃IWebDriver driver = new InternetExplorerDriver();。错误如下:
InvalidOperationException 未处理
启动 Internet Explorer 时出现意外错误。所有区域的保护模式设置并不相同。对于所有区域,启用保护模式必须设置为相同的值(启用或禁用)。(没有这样的驱动程序)
为了解决这个问题,我进入 IE -> Internet 选项 -> 安全并选中所有四个区域的“启用保护模式”。这解决了它;当我运行我的程序时,我不再收到该错误。这个问题(IE 驱动程序在 IE 10 的默认设置下不起作用)可能是一个值得记录的问题。
更改这些设置后,我的程序开始运行 - 但运行速度非常慢。在两个文本框中输入六个字符长的字符串实际上需要 60 秒。然后我切换到 32 位驱动程序(尽管有 64 位 IE),它以正常速度运行。
最后,我一直运行我的程序,它不再丢失窗口句柄。
总结一下:如果 IE 驱动程序删除窗口句柄时遇到问题,请考虑重置 IE 设置。这似乎已经为我解决了。
| 归档时间: |
|
| 查看次数: |
3464 次 |
| 最近记录: |