【问题标题】:C# Selenium No new Window Handles When Opening A New Tab In Chrome and FirefoxC# Selenium 在 Chrome 和 Firefox 中打开新标签时没有新窗口句柄
【发布时间】:2017-01-31 04:40:13
【问题描述】:

用于 Chrome 和 Firefox 的 Selenium,使用 C# 编码,将无法处理切换到在我的自动化测试期间打开的新选项卡。我不认为它专注于打开的新标签,因为当我完全运行我的程序时,我收到这个错误:“超出范围”异常和“索引超出范围。必须是非负数并且小于集合。”

我尝试过使用:

driver.SwitchTo().Window(driver.WindowHandles.Last());

driver.SwitchTo().Window(driver.WindowHandles[1]);
driver.SwitchTo().Window(driver.WindowHandles[0]).Close(); // close the first tab
System.Threading.Thread.Sleep(5000); //Wait 5 seconds just in case
driver.SwitchTo().Window(driver.WindowHandles[1]); //Makes sure I'm on the correct tab

但是没有运气。如果我不关闭第一个选项卡,我会收到错误:“NoSuchElementException:Unable to locate element:{method...}”我认为这是正确的,因为焦点仍在第一个选项卡上。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 关闭tab[0]后,旧的tab[1]不会变成新的tab[0]吗?
  • 是的,我没有注意到。谢谢。但现在我唯一的问题是我输入的 xpath 无法在新选项卡上找到。这是我会发现的另一个问题。再次感谢
  • 如果这解决了您的问题提到的问题,我可以将其发布为您接受的答案。
  • 还有一个问题,当驱动切换到窗口时,窗口会自动对焦吗?因为到目前为止,要么我的窗口没有聚焦,要么我的 xpath 错误,因为我总是收到“无法找到元素”错误。

标签: c# google-chrome selenium firefox


【解决方案1】:

关闭tab[0] 后,旧的tab[1] 将变为新的tab[0],因此您应该切换到tab[0]

Selenium 在后台运行,因此窗口在运行时不需要处于焦点位置。这也意味着 Selenium 永远不会将焦点更改回浏览器窗口。如果您在代码运行时正在查看窗口,但是您应该能够看到浏览器正在更改选项卡。

【讨论】:

  • 对不起,我应该更好地措辞我的问题。我的意思是,当驱动程序使用上面的 driver.switchTo 函数切换到旧选项卡/窗口时,新选项卡/窗口是否会从旧选项卡/窗口更改焦点?
  • 是的,这就是函数的用途;)
  • 好的,谢谢。我认为我的 XPath 不正确。非常感谢您抽出宝贵时间帮助我并回答:)
  • 要测试 XPath,您可以使用 Chrome 的开发工具,它们允许您在页面上通过 XPath 搜索 DOM。 yizeng.me/2014/03/23/… 请记住,尽管打开开发工具会分离 Selenium。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2014-11-05
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多