从selenium web-driver打开chrome中的新选项卡不起作用

时间:2017-09-12 09:53:06

标签: c# google-chrome selenium

代码语言c# Selenium Webdriver

我正在尝试使用以下代码在chrome中打开一个新标签:

        Actions action = new Actions(BrowserFactory.Driver);
        action.SendKeys(Keys.Control + "T").Build().Perform();
        string secondTabHandle = BrowserFactory.Driver.CurrentWindowHandle;

我在stackoverflow上找到了这段代码。

我也尝试过:

        IWebElement body = 
        BrowserFactory.Driver.FindElement(By.TagName("body"));
        body.SendKeys(Keys.Control+'t');
        body.SendKeys(Keys.Control+"t");

多数人也没有工作

使用此代码后没有任何反应。

有人可以帮我解决我的错误。

提前致谢。

1 个答案:

答案 0 :(得分:0)

更好的解决方案不依赖于按CTRL + T等等,因为在同一浏览器上的不同浏览器或不同版本上,CTRL + T可能会导致不同的行为。

我更喜欢在浏览器上执行javascript以打开新标签的解决方案,因为在selenium本地支持的浏览器上注入和执行javascript。

我们应该让javascript在浏览器上执行以下操作:

  1. 创建链接节点,并设置链接href为'about:blank'或您要打开的网址,设置链接目标是'_blank'

  2. 将链接节点附加到当前首页的正文

  3. 点击该链接并从正文中删除链接

  4. 代码示例:

    string newTabScript = "var d=document,a=d.createElement('a');"
    + "a.target='_blank';a.href='{0}';"
    + "a.innerHTML='new tab';"
    + "d.body.appendChild(a);"
    + "a.click();"
    + "a.parentNode.removeChild(a);"
    
    public void newTab(string tabUrl) 
    {
      if(String.IsNullOrEmpty(tabUrl) {
        tabUrl = "about:blank";
      } 
      IWebDriver driver; // assume assigned elsewhere
      IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
      js.ExecuteScript(String.format(newTabScript, tabUrl));
    }