2012-05-11 24 views
12

Testimde bir bağlantıyı tıklattığımda, yeni bir sekme açar. ChromeDriver'ın daha sonra o sekmeye odaklanmasını istiyorum. Ben ctrl + sekme kısayolunu kullanarak Tabas değiştirmek ChromeDriver almak için aşağıdaki kodu denedim:Selenium ChromeDriver geçiş sekmeleri

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

Ama bu şu istisna atar:

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

ChromeDriver kullanarak sekmeler arasında geçiş için bir yol var mı ?

+1

Sadece burada tahmin: Yeni sekme yeni bir penceredir, yani, onu driver.SwitchTo(). Window (handle) içinde bulabilirsiniz. O zaman, elbette, onu bulmak için bazı koşulları kullanmalısın. –

cevap

14

Yayınınızdaki yorumumda da belirtildiği gibi, Chrome sürücüsünün sekmeleri pencereleri işlerken kullandığı gibi kullanıp kullanmadığından emin değilim. Yeni pencereler açarken Bu kod Firefox'ta çalışıyor

, yani umarım buna da senin durumunda çalışır:

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

(Ben herhangi bir hata sunamadı Bu yanıt için kod Düzenlemelerimi umut .. .)

Krom Bu benim için çalıştı ne onu :)

+0

Çok teşekkür ederim, çekicilik gibi çalışır –

13

açmak için şansından önce emin yeni sekmede arayan başlamayın olun:

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

Bununla uzun bir kavga ettikten sonra, bunu krom sürücüsü ile çalıştırabildim. Uyarı mesajı görünmüyor ancak sekmeyi öne getiriyor ve kabul etmeyi hemen kapatıyor.

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

C# 'da iki sekme arasında geçiş yapmak için aşağıdaki satırları kullandım.

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"); 
İlgili konular