当前位置: 首页 > 知识库问答 >
问题:

如何在Selenium C#中切换Chrome标签?

燕涵容
2023-03-14

我正在使用:

  • Chrome55.0.2
  • Selenium WebDRiver 3.0.1与ChromeDRiver
  • C#4.6.1(VS2015社区版)

我正在编写打开Chrome的自动化代码,打开一个选项卡,并导航到一个主页面URL。这个主页有我解析生成二级页面URL的信息。我的问题是,我不能编写在二级页面加载后切换回主页选项卡的代码,也不能编写从不离开主页的代码。我将解释我所追求的两个选择:

选项#1-行为类似于ctrl单击

生成这个辅助页面url后,我想打开另一个选项卡,让Chrome导航到该url,但不要将主页选项卡留在Chrome中。这类似于在链接上单击<code>ctrl</code>。

选项 #2 - 行为类似于 ctrl-1(在 Chrome 中切换回选项卡 1)

我也会对一个解决方案感到满意,在一个新的Chrome标签中导航和加载二级页面url后,自动化将切换回Chrome的主页面标签。这类似于Chrome拥有焦点时在键盘上键入< code>ctrl-1。

选项3——其他东西?

我也会满足于任何其他实现我正在寻找的解决方案(不引入任何新的技术层)。

一些背景信息 - 导航

我首先尝试了以下方法,但它不符合我的要求,因为它在与主页相同的Chrome选项卡中打开生成的网址:

Session.Driver.Navigate().GoToUrl(generatedUrl);

我还没有发现一个“直接的”C#\Chrome\WebDriver命令可以在Chrome的新标签页中打开一个url它总是使用当前标签页。

我能够使用javascript找到在新标签页中打开url的代码。看起来是这样的:

// open a new tab and navigate to generated url:
IJavaScriptExecutor jscript = Session.Driver as IJavaScriptExecutor;
jscript.ExecuteScript(string.Format("window.open('{0}', '_blank');", generatedUrl));

执行javascript后,二级页面打开,成为Chrome中的活动标签。以下是我在Chrome中导航回主页html" target="_blank">标签的尝试:

我的尝试

我当然尝试了很多方法来切换选项卡等。他们在这里,所有的失败:

尝试#1:切换到()

我可以使用会话.驱动程序. WindowHandles访问每个窗口句柄。当我调试以下命令时,我看到第一个窗口句柄确实是主页;然而,该命令什么也没做。没有选项卡更改。Chrome将焦点保持在辅助页面\选项卡上。此外,没有错误消息。据我在网上读到的,这个命令应该切换选项卡。

Session.Driver.SwitchTo().Window(Session.Driver.WindowHandles.First());

尝试2:发送密钥-操作

如果这种方法有效,那就太好了。同样,以下代码没有影响,Chrome 将其焦点放在辅助页面\标签上。另外,没有错误消息。

    Actions action = new Actions(Session.Driver);
    action.SendKeys(Keys.Control + "1").Build().Perform();

作为最后的努力,我目前正在寻找一个JavaScript命令,我可以与IJavaScriptExecutor一起使用来切换选项卡 - 到目前为止没有运气。

共有1个答案

晋承嗣
2023-03-14

作为最后的努力,我目前正在搜索一个javascript命令,我可以与IJavaScriptExecutor一起使用该命令来切换选项卡-到目前为止没有运气。

我给你提供了一个使用JavaScript在标签之间切换的技巧。这不是一个完美的解决方案,但你可以作为替代方案。你应该试着

//Firstly try to switch window as you're doing 
Session.Driver.SwitchTo().Window(Session.Driver.WindowHandles.First());

//Now execute a script which would popup the alert box on current window
IJavaScriptExecutor jscript = Session.Driver as IJavaScriptExecutor;
jscript.ExecuteScript("alert('Switch tab')");

//Now you can see alert would focused on desired tab
//Now you can accept this alert and do further steps on this tab
IAlert alert = Session.Driver.SwitchTo().Alert();
alert.Accept();

注意:-如果您在尝试接受警报时出现警报异常,但找不到警报,您应该等到JavaScript触发器和警报框打开。

 类似资料:
  • 这是我写的代码,以打开一个新标签在已经打开Chrome但它是重定向到第二个url在现有的标签只有。 我想打开一个新选项卡并加载“www.mailinator.com”的url 有人能帮我吗?

  • 对于我的项目,我希望有一个切换按钮。经过大量研究,我找到了这篇文章。toggle-Switg-in-qt 我在上面的链接上实现了第三个帖子的代码。 这段代码工作正常。缺点是我不明白如何为切换按钮的两种状态添加QLabel?有人想过做这个操作吗?

  • 问题内容: 在和之间切换的最有效方法是什么? 问题答案: 使用NOT的解决方案 如果值是布尔值,最快的方法是使用 not 运算符: 用减法求解 如果值是数字,则从总数中减去是切换值的一种简单快捷的方法: 使用XOR的解决方案 如果值在 0 和 1 之间切换,则可以使用按位异或: 该技术可以推广到任意一对整数。异或一步被替换为预异常数: (此想法由Nick Coghlan提交,后来由@zxxc推广。

  • 相当绿色关于javas组件的东西等,所以请原谅我,如果我提供的信息是不够的! 请参阅以下代码。在框架中添加菜单和菜单显示,没有问题。我想知道何时调用gameOn()来删除菜单,而不是启动游戏。下面的代码仅使框架表面为“空白”,未添加游戏面板。 对如何修复它有何想法/建议?菜单面板上有一个鼠标听筒。

  • 我尝试用html、css、JavaScript制作切换标签。 这是我的代码,我试过了。 null null 但我想用仅有的HTML和CSS来制作这个函数。所以我就这样试着。但它不起作用。 null null 请帮帮我.提前谢谢你。

  • 我正在打开一个页面,执行一些操作,我正在使用这段代码在下一个选项卡中打开另一个链接 字符串url=“https://qa.logfireapps.com/lgf_700_qa_rf”; String args1=String.format(“window.open(”%s“,”%s“);”,url,“new”); ((JavascriptExecutor)driver).ExecuteScript