2012-05-11 49 views
12

当我点击测试中的链接时,它会打开一个新选项卡。 我希望ChromeDriver能够专注于该选项卡。我曾尝试下面的代码获取ChromeDriver使用CTRL + TAB快捷键来更改塔巴斯:Selenium ChromeDriver开关标签

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

但是,这将引发以下异常:

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

有没有一种方法来切换使用ChromeDriver标签?

+1

只是在这里猜测:新选项卡是一个新窗口,也就是说,您可以在driver.SwitchTo()。窗口(句柄)中找到它。那么,当然,你必须使用一些条件才能找到它。 –

回答

14

正如我在对你的文章的评论中所提到的,我不确定Chrome驱动程序是否像处理Windows一样处理标签页。

打开新的窗口时,该代码在Firefox,所以希望它在你的情况下工作,以及:

public void SwitchToWindow(Expression<Func<IWebDriver, bool>> 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"); 

(我希望我的编辑给了这个答案没有引入任何错误代码.. 。)

只要确保你不会开始寻找新的选项卡浏览器已打开它:)

+0

非常感谢,像魅力一样 –

13

这是对我工作的机会面前:

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 
0

经过长时间的斗争后,我能够得到这与铬驱动程序的工作。警报消息不可见,但将选项卡放在前面,并接受立即关闭它。

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

在C#中我使用了下面几行来切换这两个选项卡。

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