【问题标题】:Cannot find any elements in Selenium using Internet Explorer Driver使用 Internet Explorer 驱动程序无法在 Selenium 中找到任何元素
【发布时间】:2014-05-20 22:13:01
【问题描述】:

无论使用的页面或选择类型如何,我都无法让 Selenium 使用 Internet Explorer 驱动程序识别任何元素。

String iedriver = "C:\\selenium-server\\IEDriverServer.exe";
System.setProperty("webdriver.ie.driver", iedriver);
WebDriver driver = new InternetExplorerDriver();
driver.get("http://www.google.com");
WebElement element = driver.findElement(By.xpath("//body"));

通过 xpath 选择会导致 org.openqa.selenium.InvalidSelectorException: xpath 表达式“//body”无法评估或不会生成 WebElement。其他选择类型也失败:

WebElement element = driver.findElement(By.cssSelector("body"));

WebElement element = driver.findElement(By.tagName("body"));

 WebElement element = driver.findElement(By.name("q"));

按 CSS 选择器、名称或标记名称总是导致 org.openqa.selenium.NoSuchElementException

所有选择都可以与 Firefox 驱动程序、Chrome 驱动程序甚至 Html 单元驱动程序完美配合。

浏览器正确启动,页面按预期加载。 driver.getCurrentUrl();driver.getPageSource(); 返回预期值。

我尝试在选择元素之前引入显式和隐式等待,但没有效果,使用

Thread.sleep(10000); 

WebDriverWait(driver,60).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//body")));

还尝试单步执行代码以手动等待元素显示。

我尝试过的其他事情包括 1) 在所有区域中将安全设置设置为相同级别 2) 禁用增强保护模式 3) 在注册表中设置 FEATURE_BFCACHE

我正在使用 Selenium 和 IEDriverServer 2.41 版。观察到该问题在本地和远程运行。该环境在使用 IE10 64 位和 IEDriverServer 64 位的 Windows 7 64 位上。在使用 IEDriverServer 32 位的 IE11 32 位上观察到同样的问题。我在这里使用 www.google.com 作为公开可见的测试,但在我们的内部网站上也发现了这个问题。

【问题讨论】:

  • 无需设置“所有区域的安全设置为同一级别”。但是,有必要在所有区域中将Protected Mode settings 设置为相同的值。
  • 这是一个很好的建议,但我已经将保护模式全部设置为相同的设置。我尝试了所有启用和未启用保护模式的区域。
  • 我什至尝试使用 INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS 但没有任何区别。
  • 非常感谢您的提问:)

标签: internet-explorer selenium-webdriver


【解决方案1】:

对于那些在 IE11 上遇到问题的人,原因如下:Microsoft 通过 Windows Update[1] 发布了更新 KB3025390,作为其正常“周二补丁”更新周期的一部分。对于大多数用户而言,无需用户交互即可下载和安装此更新。此更新在与 IE11 一起使用时会破坏 IE 驱动程序。

https://groups.google.com/forum/m/#!topic/selenium-users/TdY_rRNF-gw

修复,删除更新。 目前没有 Selenium 更新来解决此问题。

【讨论】:

【解决方案2】:

我可以通过将 Internet 区域的“Internet 选项”中的安全级别从“高”降低到“中高”或“中”来解决问题。

【讨论】:

  • 您是如何在您的 selenium webdriver 脚本中以编程方式实现此更改的?
  • function AddTrustedDomains([string]$domains) { foreach ($domain in $domains.Split(",")) { $key = Join-Path "HKCU:\Software\Microsoft\Windows\ CurrentVersion\Internet Settings\ZoneMap\Domains" $domain New-Item $key -Force | Set-ItemProperty -Name "https" -Value 2 } }
【解决方案3】:

对我有用的是本页底部注明的解决方案:Running local HTML pages

要解决此问题,请转到“工具”菜单中的“Internet 选项”(或较新版本中的齿轮图标)。打开高级选项卡。向下滚动到“安全”并选择“允许活动内容在我的电脑上的文件中运行”。

然后需要重新启动。

【讨论】:

  • 最佳解决方案 - 谢谢
【解决方案4】:

如果您在运行测试之前以管理员模式运行 IDE,它将解决问题。确保 IDE 以管理员权限运行。

【讨论】:

    【解决方案5】:

    转到 IE 设置> 安全选项卡> 禁用所有区域的保护模式。这个活动解决了我的问题。

    【讨论】:

      【解决方案6】:

      我在异步访问多个元素时遇到问题。 将它们放在异步函数中并在每个语句为我解决它之前写“等待”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多