NoSuchWindowException - 尽管在其他答案中遵循了配置建议,但无法在IE上的Selenium中找到关闭窗口上的元素

时间:2017-07-21 21:50:42

标签: c# selenium internet-explorer selenium-webdriver selenium-iedriver

这与Selenium上的my other recent question有关(该问题与Firefox特定的问题有关,这个问题与IE特定的问题有关。)

基本上,当我运行以下代码时

ieDriver.Navigate().GoToUrl("http://localhost:51282");
IWebElement linkToAboutPage = ieDriver.FindElement(By.Id("test"));
linkToAboutPage.Click();

模拟单击链接,它成功导航到页面,但当它尝试检索实际元素时,我得到以下异常:

An exception of type 'OpenQA.Selenium.NoSuchWindowException' occurred in WebDriver.dll but was not handled in user code

Additional information: Unable to find element on closed window

this question的已接听答案表明,IE安全设置中的“启用保护模式”应全部选中或全部取消选中。实际上,当我查看这些设置时,Intranet中未选择“启用保护模式”,但其他设备未选中: enter image description here

不幸的是,截图显示,这是由我的公司IT部门管理的,我不确定我会说服他们让我更改设置。我也无法按照其他一些答案建议的方式编辑我的注册表(可能是由于缺乏管理权限)。

我见过的其他一些解决方案包括将IntroduceInstabilityByIgnoringProtectedModeSettings设置为true,提供InitialBrowserUrl或将EnsureCleanSession设置为true。如下所示,我目前正在做所有这些事情:

var ieOptions = new InternetExplorerOptions()
{
    InitialBrowserUrl = "http://www.google.com",
    IntroduceInstabilityByIgnoringProtectedModeSettings = true,
    IgnoreZoomLevel = true,
    EnableNativeEvents = true,
    EnsureCleanSession = true
};

ieDriver = new InternetExplorerDriver(ieOptions);
ieDriver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 0, 10);

但是,我仍然遇到完全相同的问题。

我还能尝试一些不会让我因为政策异常而烦恼企业IT吗?

也许很重要,当我在localhost上运行时,这个只会发生(这是一个问题,因为那是我打算完成大部分测试的地方)。

1 个答案:

答案 0 :(得分:4)

我发现将InitialBrowserUrl功能设置为您要导航到的起始网址,与IntroduceInstabilityByIgnoringProtectedModeSettings = true配对,对我有用。

var ieOptions = new InternetExplorerOptions()
{
    InitialBrowserUrl = <your-starting-url>
    IntroduceInstabilityByIgnoringProtectedModeSettings = true,
    ...
};

不幸的是,我没有理由说明为什么会这样,所以这个&#34;修复&#34;可能只是轶事...

您可以尝试其他一些解决方案(来自官方参考):

  

必需的配置

     
      
  • IEDriverServer exectuable必须为downloaded并放在PATH
  •   
  • 在Windows Vista或Windows 7上的IE 7或更高版本中,必须将每个区域的保护模式设置设置为相同的值。只要每个区域的值相同,该值就可以打开或关闭。要设置保护模式设置,请选择&#34; Internet选项...&#34;从“工具”菜单中,单击“安全”选项卡。对于每个区域,选项卡底部都会显示一个复选框,标记为&#34;启用保护模式&#34;。
  •   
  • 此外,&#34;增强保护模式&#34; IE 10及更高版本必须禁用。此选项位于“Internet选项”对话框的“高级”选项卡中。
  •   
  • 浏览器缩放级别必须设置为100%,以便可以将本机鼠标事件设置为正确的坐标。
  •   
  • 对于IE 11 only ,您需要在目标计算机上设置一个注册表项,以便驱动程序可以维护与其创建的Internet Explorer实例的连接。对于32位Windows安装,您必须在注册表编辑器中检查的密钥是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE。对于64位Windows安装,密钥为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE。请注意,FEATURE_BFCACHE子项可能存在也可能不存在,如果不存在,则应创建该子项。 重要提示:在此密钥中,创建名为iexplore.exe的值为0的DWORD值。
  •   

参考:

https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver#required-configuration