2013-08-09 26 views
13

Sto lavorando con Selenium e mi chiedo se è possibile utilizzare più TAB in una volta? Non voglio utilizzare più istanze del browser (ad esempio, 2 copie del gioco IE). SE NON È POSSIBILE, come si fa a passare tra le singole schede, che sono in esecuzione sequenzialmente?Selenium più schede allo stesso tempo

Grazie!

risposta

20

Se c'è un link che apre una nuova finestra/scheda, quindi è possibile utilizzare driver.switchTo().window();

Tuttavia, se si desidera eseguire qualcosa su più finestre, allora vi consiglio di avere più istanze di WebDriver. È molto più facile da gestire ed è supportato (ci sono soluzioni alternative all'apertura di una nuova scheda/finestra, come la pressione di un tasto di scelta rapida che apre una nuova finestra, ma non sono supportati).

Se si desidera che più thread agiscano sulla stessa istanza driver, ma schede diverse, NON è possibile.

+0

risposta meravigliosa. Ho una seconda domanda. Con IE, come faccio a passare alla nuova scheda? Sto usando C#. driver.switchTo(). window() richiede una stringa. Grazie –

+0

Devi ottenere gli handle della finestra usando driver.getWindowHandles(). È quindi possibile scorrere le finestre e testare l'URL o il titolo per assicurarsi che sia quello desiderato. –

+0

Penso di aver bisogno di un altro esempio. Sto usando C#. Penso che potrebbe essere java .. –

7

È possibile passare da una scheda all'altra senza disporre di più istanze del browser.
C'è una differenza nel modo in cui il driver Web gestisce finestre diverse e come gestisce le diverse schede.

Caso 1:
Nel caso in cui non ci sono più finestre, quindi il seguente codice può aiutare:

//Get the current window handle 
String windowHandle = driver.getWindowHandle(); 

//Get the list of window handles 
ArrayList tabs = new ArrayList (driver.getWindowHandles()); 
System.out.println(tabs.size()); 
//Use the list of window handles to switch between windows 
driver.switchTo().window(tabs.get(0)); 

//Switch back to original window 
driver.switchTo().window(mainWindowHandle); 


Caso 2:
Nel caso in cui non ci sono più schede nella stessa finestra , quindi c'è solo una maniglia della finestra. Quindi il passaggio da una finestra all'altra mantiene il controllo nella stessa scheda.
In questo caso è più utile usare Ctrl + \ t (Ctrl + Tab) per passare da una scheda all'altra.

//Open a new tab using Ctrl + t 
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); 
//Switch between tabs using Ctrl + \t 
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t"); 

codice di esempio dettagliate possono essere trovate qui:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

+0

Commento davvero utile e ha funzionato per me, specialmente in caso di utilizzo di più schede. – SelenyanC2

0

se si desiderano eseguire le finestre multiple, allo stesso tempo, l'uso filettatura con più istanze di IWebDriver

EX:

public void Work() 
{ 
IWebDriver driver = new ChromeDriver("D:\\Drivers"); 
driver.Navigate().GoToUrl(URL); 
\\Do the rest 
} 
public void Work2() 
{ 
IWebDriver driver = new ChromeDriver("D:\\Drivers"); 
driver.Navigate().GoToUrl(URL2); 
\\Do the rest 
} 

e chiamare la funzione in questo modo:

Thread thread1 = new Thread(new ThreadStart(Work)); 
thread1.Start(); 
Thread thread2 = new Thread(new ThreadStart(Work2)); 
thread2.Start(); 
1

di aprire più schede:

driver = new ChromeDriver(); 
IJavaScriptExecutor jscript = driver as IJavaScriptExecutor; 
for (int i = 0; i < 10; i++) 
{     
    driver.Navigate().GoToUrl(this.baseURL);  
    jscript.ExecuteScript("window.open('{0}', '_blank');", this.baseURL); 
} 

Swich tra di loro:

for (int i = 0; i < driver.WindowHandles.Count; i++) 
{ 
    driver.SwitchTo().Window(driver.WindowHandles[i])]); 
} 
Problemi correlati