【问题标题】:Open new tab in chrome from selenium web-driver doesn't work从 selenium web-driver 在 chrome 中打开新标签不起作用
【发布时间】:2017-09-12 09:53:06
【问题描述】:

代码语言 c# Selenium 网络驱动程序

我正在尝试使用以下代码在 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");

那也不行

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

谁能帮我解决我做错了什么。

提前致谢。

【问题讨论】:

  • 忽略它是 Java 的事实,就像与 c# 相关
  • 我也试过 IWebElement body = BrowserFactory.Driver.FindElement(By.TagName("body")); body.SendKeys(Keys.Control + 't');如该页面上所述,但这无济于事

标签: c# google-chrome selenium


【解决方案1】:

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

我更喜欢在浏览器上执行 javascript 以打开新选项卡的解决方案,因为在 selenium 原生支持的浏览器上注入和执行 javascript。

我们应该让javascript在浏览器上做以下事情:

  1. 创建链接节点,并设置链接href为'about:blank'或者你要打开的url,设置链接目标为'_blank'

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

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

代码示例:

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

【讨论】:

  • 你也有切换标签的代码吗?
  • 对于chrome浏览器,你可以试试binaryclips.com/2016/03/…说的,swtich之后的一个提醒,你可能注意到活动的Tab没有改变,但确实操作切换的Tab的脚本应该可以了。跨度>
  • @Yong 新浏览器(不是新标签)你会怎么做
猜你喜欢
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2017-09-15
  • 2011-06-26
相关资源
最近更新 更多