使用 Selenium 在现有浏览器会话中打开新选项卡

问题描述 投票:0回答:7

我当前的 C# 代码会打开一个窗口,然后单击按钮后导航到指定的 URL。

protected void onboardButton_Click(object sender, EventArgs e)
{
   IWebDriver driver = new ChromeDriver();
   driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");
   driver.Navigate().GoToUrl("http://www.google.com")
}

但是我计划导航到的网站具有单点登录。如何在我的现有浏览器会话中打开一个新选项卡并从那里导航?上面的代码似乎不起作用。

c# asp.net selenium selenium-webdriver selenium-chromedriver
7个回答
32
投票

发送

Keys.Control + "t"
对我来说不起作用。我必须用 javascript 来做,然后切换到它。

((IJavaScriptExecutor)driver).ExecuteScript("window.open();");
driver.SwitchTo().Window(driver.WindowHandles.Last());

25
投票

要处理新选项卡,您应该先切换到它。尝试以下操作:

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

您可能还需要切换回来:

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

5
投票

解决方案非常简单:

Driver.SwitchTo().NewWindow(WindowType.Tab);

享受...


2
投票

这可能不起作用:

driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t");

替代方案:查找目标为空白的可点击元素(在页面的后续代码中搜索“空白”)。这将打开新选项卡。

而不是在选项卡之间切换(感谢@Andersson):

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

2
投票

我们可以模拟

Ctrl
+
Element Click

Actions action = new Actions(_driver);
action.KeyDown(Keys.Control).MoveToElement(body).Click().Perform();

参考:
https://www.codeproject.com/Answers/1081051/Open-link-in-New-tab-using-Selenium-Csharp-for-chr#answer3


0
投票
Dim js As IJavaScriptExecutor = TryCast(driver, IJavaScriptExecutor)
                    js.ExecuteScript("window.open()")
                    driver.SwitchTo().Window(driver.WindowHandles.Last())

-5
投票
IWebDriver driver = new ChromeDriver(); 

将其更改为:

var driver = new ChromeDriver();

我不知道为什么。可能是 IWebDriver 错过了该方法。

© www.soinside.com 2019 - 2024. All rights reserved.