Selenium C# 打开新选项卡 CTRL+T 不适用于 CHROME

问题描述 投票:0回答:5
static void Main()
{
    IWebDriver driver = new ChromeDriver();
    driver.Navigate().GoToUrl("http://google.com");
    IWebElement body = driver.FindElement(By.TagName("body"));

    body.SendKeys(Keys.Control + "t");

}

这是我试图用来打开新选项卡的代码,但它不起作用,我没有收到任何错误,驱动程序打开了 Google,仅此而已...... 我搜索了很多,发现了很多教程甚至视频,人们使用完全相同的代码并且它对他们有用,但对我来说却不起作用,我无法弄清楚......

我尝试将 Keys.Shift +“t”发送到搜索字段,它起作用了,它在字段中写入了大写 T

我也尝试过

Actions act = new Actions(driver);
act.KeyDown(Keys.Control).SendKeys("t").Perform();

它仍然不起作用,但是如果我将 Keys.Control 更改为 Keys.Shift 它会再次写入,似乎涉及 Keys.Control 的任何内容都不起作用!!

编辑:我尝试使用 IE 驱动程序运行代码,它在那里工作,它打开新选项卡,但它不会在 Chrome 上打开新选项卡?

c# selenium selenium-webdriver selenium-chromedriver
5个回答
17
投票

感谢您的回答!我用 JavaScript 做到了。

((IJavaScriptExecutor)driver).ExecuteScript("window.open();");

6
投票

看起来这是 chrome 驱动程序的一个“功能”。

https://bugs.chromium.org/p/chromedriver/issues/detail?id=581

这是我们在 ChromeDriver 中模拟键盘输入的方式的限制。键绕过浏览器进程直接发送到渲染进程。因此浏览器进程中的任何键盘快捷键处理程序都不会被 sendKeys() 调用。


1
投票

试试这个

driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
driver.SwitchTo().Window(driver.WindowHandles.Last());
driver.Navigate().GoToUrl("http://www.google.com")

0
投票

如果您使用的是 Mac,请使用 Keys.Command 而不是 Keys.Control:

body.SendKeys(Keys.Command + "t");

0
投票

此代码将不起作用

((IJavaScriptExecutor)driver).ExecuteScript("window.open();");

条件:

  1. 使用此代码打开两个表,
  2. 尝试关闭最后一个选项卡后,/对于第一个选项卡,您了解什么(即最后一个选项卡)
  3. 尝试像之前一样创建新选项卡后,
  4. 鞠躬尝试打开新的,它不会工作,
© www.soinside.com 2019 - 2024. All rights reserved.