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

时间:2017-01-11 09:51:44

标签: c# asp.net selenium selenium-webdriver selenium-chromedriver

我在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")

    }

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

万分感谢!

5 个答案:

答案 0 :(得分:10)

要处理新标签,您应该先切换到它。请尝试以下方法:

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());

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

这可能不起作用:

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

替代方案:查找目标为空白的可点击元素(搜索"空白"在页面' s surce代码中)。这将打开新标签。

在标签之间切换(感谢@Andersson):

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

答案 3 :(得分:0)

我们可以模拟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

答案 4 :(得分:-2)

IWebDriver driver = new ChromeDriver(); 

将其更改为:

var driver = new ChromeDriver();

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