Selenium ChromeDriver开关标签

当我单击测试中的链接时,它会打开一个新选项卡。 我希望ChromeDriver专注于该标签。 我尝试使用以下代码让ChromeDriver使用ctrl + tab快捷方式更改tabas:

Actions builder = new Actions(driver); builder.KeyDown(Keys.Control).KeyDown(Keys.Tab).KeyUp(Keys.Tab).KeyUp(Keys.Control);//switch tabs IAction switchTabs = builder.Build(); switchTabs.Perform(); 

但是这引发了以下exception:

 ekmLiveChat.tests.UITests.EndToEndTest.EndToEnd: System.ArgumentException : key must be a modifier key (Keys.Shift, Keys.Control, or Keys.Alt) Parameter name: key 

有没有办法使用ChromeDriver切换标签?

正如我在你的post评论中所提到的,我不确定Chrome驱动程序是否像处理窗口一样处理标签。

这个代码在打开新窗口时可以在Firefox中运行,所以希望它也适用于你的情况:

 public void SwitchToWindow(Expression> predicateExp) { var predicate = predicateExp.Compile(); foreach (var handle in driver.WindowHandles) { driver.SwitchTo().Window(handle); if (predicate(driver)) { return; } } throw new ArgumentException(string.Format("Unable to find window with condition: '{0}'", predicateExp.Body)); } SwitchToWindow(driver => driver.Title == "Title of your new tab"); 

(我希望我对这个答案的代码编辑没有引入任何错误……)

在Chrome有机会打开它之前,请确保您没有开始寻找新标签:)

这对我有用:

 var popup = driver.WindowHandles[1]; // handler for the new tab Assert.IsTrue(!string.IsNullOrEmpty(popup)); // tab was opened Assert.AreEqual(driver.SwitchTo().Window(popup).Url, "http://blah"); // url is OK driver.SwitchTo().Window(driver.WindowHandles[1]).Close(); // close the tab driver.SwitchTo().Window(driver.WindowHandles[0]); // get back to the main window 

经过长时间的斗争,我能够使用Chrome驱动程序。 警报消息不可见,但将标签置于前面并接受立即关闭。

 //Rotate Tabs seleniumDriver.SwitchTo().Window(seleniumDriver.WindowHandles[currentUrlIndex]); IJavaScriptExecutor jscript = seleniumDriver as IJavaScriptExecutor; jscript.ExecuteScript("alert('Focus')"); seleniumDriver.SwitchTo().Alert().Accept(); 

在C#中,我使用以下行在两个选项卡之间切换。

 IJavaScriptExecutor js = (IJavaScriptExecutor)driver; js.ExecuteScript("window.open();"); IList tabs = new List(driver.WindowHandles); driver.SwitchTo().Window(tabs[1]); driver.Navigate().GoToUrl("http://www.google.com");