JPaulPunzalan
JPaulPunzalan

Reputation: 427

Open a new tab in an existing browser session using Selenium

My current code below in C# opens a window then navigates to the specified URL after a button click.

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")
}

But the site that I am planning to navigate to has single sign-on. How can I open a new tab in my existing browser session and navigate from there? The above code does not seem to work.

Upvotes: 22

Views: 64226

Answers (6)

MiMFa
MiMFa

Reputation: 1164

The solution is really simple:

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

Enjoy...

Upvotes: 6

Wang Liang
Wang Liang

Reputation: 4444

We can simulate Ctrl + Element Click

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

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

Upvotes: 2

nthpixel
nthpixel

Reputation: 3109

Sending Keys.Control + "t" didn't work for me. I had to do it with javascript and then switch to it.

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

Upvotes: 32

Atanas Atanasov
Atanas Atanasov

Reputation: 211

This may not works:

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

Alternative: Find clickable element with target blank (search for "blank" in page's surce code). This will open new tab.

Than switch between tabs (thanks @Andersson) with:

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

Upvotes: 2

albert jin
albert jin

Reputation: 11

IWebDriver driver = new ChromeDriver(); 

Change this to:

var driver = new ChromeDriver();

I do not know why. May be the IWebDriver miss the method.

Upvotes: -5

Andersson
Andersson

Reputation: 52685

To handle new tab you should switch to it first. Try following:

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

Also you might need to switch back:

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

Upvotes: 25

Related Questions