在新选项卡中打开的Selenium驱动程序不能像社区共享知识所描述的那样工作

时间:2016-01-11 08:51:04

标签: c# selenium tabs

我知道这是一个矛盾的话题。 "正式"驱动程序不支持选项卡,但是许多地方声明新打开的选项卡将通过窗口句柄可用,我们可以使用句柄在选项卡之间切换。  (代码示例是C#,但我希望问题中的C#没有什么特别之处)

 driver.SwitchTo.Window(myHandle);

我正在尝试在新标签中打开一个链接。我有成功,浏览器显示新选项卡,但驱动程序的窗口句柄不包含新打开的选项卡,只包含一个原始窗口句柄。这似乎是合乎逻辑的,选项卡不是一个窗口,但是在许多地方它被描述为它应该工作,并且驱动程序将选项卡视为窗口。我错过了什么?

在新标签页中打开:

// Performing Ctrl + Click on my link:
new Actions(driver)
    .KeyDown(Keys.Control)
    .Click(myLink)
    .KeyUp(Keys.Control).Perform();

// driver.WindowHandles did **not** change, still contains one handle
// The newly opened tab can not be reached, because we can not even switch
// the driver to it.

在新窗口中打开:

// Performing context menu and "Open new Window" on my link
new Actions(driver)
    .ContextClick(myLink)
    .SendKeys("w")
    .Perform();
// driver.WindowHandles **changed**, contains 2 handles
// Switch to the newly opened window works:
driver.SwitchTo().Window(driver.WindowHandles.Last());

其他信息:

  • 使用Firefox v43.0.4
  • 使用官方Selenium C#bindings v2.48.2(nuget)
  • OS Windows 7 64位
  • 其中一个标签描述为工作的zillon地方:here(参见所有答案和评论)

1 个答案:

答案 0 :(得分:1)

浏览器之间存在差异,例如在Chrome中,驱动程序识别出两个窗口句柄。在FireFox中,我也只有一个窗口句柄,但焦点在新标签上。

要在标签之间切换,您可以使用Actions

action.KeyDown(Keys.Control).SendKeys("2").Perform(); //to switch to the second tab