Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Selenium C#中切换Chrome上的选项卡?_Javascript_C#_Selenium_Selenium Webdriver_Selenium Chromedriver - Fatal编程技术网

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社区版)
我正在编写自动代码,打开Chrome,打开一个选项卡,并导航到主页URL。此主页包含我解析以生成辅助页面URL的信息。我的问题是,我无法编写在第二页加载后切换回主页选项卡的代码,也无法编写从不离开主页的代码。我将解释我正在寻求的两种选择:

选项#1-表现得像
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”)