2012-05-11 55 views
12

Khi tôi nhấp vào liên kết trong thử nghiệm của mình, nó sẽ mở một tab mới. Tôi muốn ChromeDriver sau đó tập trung vào tab đó. Tôi đã thử đoạn mã sau để có được ChromeDriver thay đổi tabas sử dụng ctrl + tab shortcut:Selenium Các tab chuyển đổi 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(); 

Nhưng điều này ném ngoại lệ sau đây:

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

Có cách nào để chuyển đổi các tab bằng ChromeDriver ?

+1

Chỉ cần đoán ở đây: Tab mới là cửa sổ mới, nghĩa là bạn có thể tìm thấy nó trong trình điều khiển.Chuyển sang(). Cửa sổ (xử lý). Sau đó, tất nhiên, bạn phải sử dụng một số điều kiện để tìm thấy nó. –

Trả lời

14

Như đã đề cập trong nhận xét của tôi về bài đăng của bạn, tôi không chắc liệu trình điều khiển Chrome có xử lý các tab giống như cách xử lý các cửa sổ hay không.

Mã này hoạt động trong Firefox khi mở cửa sổ mới, vì vậy hy vọng nó hoạt động trong trường hợp của bạn cũng như:

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

(Tôi hy vọng sửa của tôi để mã cho câu trả lời này không giới thiệu bất kỳ sai sót .. .)

Chỉ cần chắc chắn rằng bạn không bắt đầu tìm kiếm tab mới trước khi Chrome đã có cơ hội để mở nó :)

+0

Cảm ơn bạn rất nhiều, hoạt động như một sự quyến rũ –

13

Đây là những gì làm việc cho tôi:

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

Sau một cuộc chiến dài với điều này tôi đã có thể làm việc này với trình điều khiển chrome. Thông báo cảnh báo không hiển thị nhưng đưa tab đến trước và chấp nhận đóng ngay lập tức.

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

Trong C# tôi đã sử dụng các dòng dưới đây để chuyển đổi giữa hai tab.

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"); 
Các vấn đề liên quan