Javascript 如何在Selenium C#中切换Chrome上的选项卡?
我正在使用:Javascript 如何在Selenium C#中切换Chrome上的选项卡?,javascript,c#,selenium,selenium-webdriver,selenium-chromedriver,Javascript,C#,Selenium,Selenium Webdriver,Selenium Chromedriver,我正在使用: 铬55.0.2 带ChromeDriver的Selenium WebDriver 3.0.1 C#4.6.1(VS2015社区版) 我正在编写自动代码,打开Chrome,打开一个选项卡,并导航到主页URL。此主页包含我解析以生成辅助页面URL的信息。我的问题是,我无法编写在第二页加载后切换回主页选项卡的代码,也无法编写从不离开主页的代码。我将解释我正在寻求的两种选择: 选项#1-表现得像ctrl单击一样 生成这个辅助页面url后,我想打开另一个选项卡,让Chrome导航到该ur
- 铬55.0.2
- 带ChromeDriver的Selenium WebDriver 3.0.1
- C#4.6.1(VS2015社区版)
ctrl单击一样
生成这个辅助页面url后,我想打开另一个选项卡,让Chrome导航到该url,但不要将主页选项卡留在Chrome中。这类似于在链接上按住ctrl键并单击
选项#2-行为类似于ctrl-1
(切换回Chrome中的选项卡1)
我也会对一个解决方案感到满意,即在新的Chrome选项卡中导航和加载辅助页面url后,自动化将切换回Chrome中的主页选项卡。这类似于在Chrome具有焦点时在键盘上键入ctrl-1
选项3还有别的吗
我也会对任何其他解决方案感到满意,这些解决方案可以实现我所寻找的目标(不引入任何新的技术层)
一些背景信息-导航
我首先尝试了以下方法,但它没有满足我的要求,因为它在与主页相同的Chrome选项卡中打开生成的url:
Session.Driver.Navigate().GoToUrl(generatedUrl);
我没有发现在Chrome的新选项卡中打开url的“direct”C#\Chrome\WebDriver命令-它将始终使用当前选项卡
我能够找到使用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中导航回主页选项卡的尝试:
我的尝试
当然,我尝试了许多切换选项卡的方法,等等。这些方法都失败了:
尝试#1:切换到()
我可以使用Session.Driver.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
一起使用它来切换选项卡-到目前为止运气不好
作为最后的努力,我目前正在搜索一个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触发器和警报框打开。这起到了作用……虽然不优雅,但确实起到了作用。谢谢。复制了你的场景。不确定为什么
SwitchTo()
在您的案例中不起作用。但这对我很有效<代码>((IJavaScriptExecutor)驱动程序).ExecuteScript(“window.open”(“空白”、“tab2”);”);driver.SwitchTo()窗口(“tab2”)代码>。