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

EJo*_*ica 6 c# selenium internet-explorer selenium-webdriver selenium-iedriver

这与我最近在Selenium上提出的其他问题有关(该问题与Firefox相关的问题有关,此问题与IE相关的问题有关)。

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

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

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

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

对此问题的可接受答案表明,应在“ IE安全设置”中将“启用保护模式”全部选中或全部取消选中。确实,当我查看这些设置时,未为Intranet选择“启用保护模式”,而为其他选择未选中: 在此处输入图片说明

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

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

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);
Run Code Online (Sandbox Code Playgroud)

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

我还有其他尝试可以解决的事情,而不会涉及我将公司IT误认为是政策例外吗?

也许很明显,这在我继续运行时才会发生localhost(这是一个问题,因为这是我打算进行大部分测试的地方)。

bud*_*udi 4

我发现将InitialBrowserUrl功能设置为您想要导航到的起始 URL,并与 配对IntroduceInstabilityByIgnoringProtectedModeSettings = true,对我来说很有效。

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

不幸的是,我没有理由解释为什么会这样,所以这个“修复”可能只是轶事......


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

所需配置

  • 必须下载IEDriverServer 可执行文件并将其放置在您的PATH中。
  • 在 Windows Vista 或 Windows 7 上的 IE 7 或更高版本上,您必须将每个区域的保护模式设置设置为相同的值。该值可以打开或关闭,只要每个区域都相同即可。要设置保护模式设置,请从“工具”菜单中选择“Internet 选项...”,然后单击“安全”选项卡。对于每个区域,选项卡底部都会有一个标记为“启用保护模式”的复选框。
  • 此外,对于 IE 10 及更高版本,必须禁用“增强保护模式”。该选项位于“Internet 选项”对话框的“高级”选项卡中。
  • 浏览器缩放级别必须设置为 100%,以便本机鼠标事件可以设置为正确的坐标。
  • 对于 IE 11 ,您需要在目标计算机上设置注册表项,以便驱动程序可以维持与其创建的 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.exe0 的 DWORD 值。

参考:

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