2012-06-27 15 views
6

Eseguo il test selenio rc in Eclipse con TestNG. Ho un link che tenta di aprire una nuova pagina del browser. Come posso selezionare questa nuova pagina in cui operare? Io uso questo codice:selenio, come posso selezionare una nuova finestra

selenium.selectWindow("name=NewPage");

tuttavia si dice pagina non trovata. Cerco anche di definire gli ID di pagina o titoli con questo codice:

String[] wins = selenium.getAllWindowIds(); 
    for (String s : wins) 
     System.out.println("win: " + s); 

Non definisce la mia nuova finestra aperta:

win: MainPage 
win: 

Se l'uso selenium.getAllWindowNames() ottengo win: selenium_main_app_window win: selenium_blank65815.

scrivo questo codice selenium.selectWindow("name=blank99157"); ma ottiene l'errore - ERROR: Window does not exist. If this looks like a Selenium bug, make sure to read http://seleniumhq.org/docs/02_selenium_ide.html#alerts-popups-and-multiple-windows for potential workarounds.

risposta

0

Non potrebbe utilizzare la finestra ID corretto.

Dai un'occhiata a questo link. Potresti trovare la tua risposta here.

Fammi sapere che questo aiuta.

+0

non utile per me – khris

0

Prova selenium.getAllWindowNames(), selenium.getAllWindowTitles() .. uno funzionerà sicuramente.

+0

opere, ma non può selezionare la finestra con il nome mostrato – khris

+0

Usa selenium.selectWindow (MainPage) per andare quella pagina e selenium.selectWindow (null) per tornare al vecchio pagina. Se non funziona, prova anche questo selenium.openWindow ("URL", "MyWindow"); selenium.selectWindow ("MyWindow"); –

7

La finestra ovviamente non ha nome, quindi non è possibile selezionarlo per nome.

  1. Se la finestra viene aperta tramite JavaScript e si può modificare lo script, provare a cambiare window.open("someUrl"); a window.open("someUrl", "someName");, sarete quindi in grado di selezionare la finestra con il nome set. Maggiori informazioni su MDN doc for window.open().

  2. Selenium RC non supporta i collegamenti <a href="someUrl" target="_blank"> (che aprono il collegamento in una nuova finestra). Pertanto, se la finestra è aperta da un collegamento di questo tipo, si deve trovare questo elemento <a>, ottiene l'attributo href e chiamare

    selenium.openWindow(theFoundUrl, "theNewWindow"); 
    selenium.selectWindow("id=theNewWindow"); 
    
  3. Se viene aperto tramite JavaScript prima o durante l'evento onload, è 'll bisogno di chiamare

    selenium.openWindow("", "theNewWindow"); 
    selenium.selectWindow("id=theNewWindow"); 
    

    Maggiori informazioni su questo nel bug SEL-339 o nei openWindow() e selectWindow() JavaDocs.

  4. Se avete solo due finestre/voler aprire quello più nuovo, si può provare

    selenium.selectPopup()

    Questo è, ovviamente, il modo più semplice, perché seleziona la prima finestra non-top. Pertanto, è utile solo quando si desidera selezionare il popup più recente.

  5. Se la nuova finestra ha un unico titolo , si può fare

    selenium.selectPopup("Title of the window"); 
    

    o selenium.selectWindow("title=Title of the window");

  6. In caso contrario, è necessario iterare selenium.getAllWindowNames() per ottenere il nome giusto (selenio crea nomi per Windows senza uno). Tuttavia, non è possibile codificare tale nome nella tua testcase, perché cambierà ogni volta, quindi dovrai elaborare una logica dinamica per questo.

  7. Non ti piace: Vai per WebDriver. Dovrebbe essere lontano più resistente a tali problemi.

+0

provo la variante 6. Ho scritto questo codice: String wins [] = selenium.getAllWindowNames(); \t per (stringa s: vittorie) \t System.out.println ("win:" + s); \t \t \t \t selenium.selectWindow ("name = wins [2]"); – khris

+0

Ma ottieni errore: ERRORE: la finestra non esiste. Se questo sembra un bug di selenio, assicurati di leggere http://seleniumhq.org/docs/02_selenium_ide.html#alerts-popups-and-multiple-windows per potenziali soluzioni alternative. – khris

+0

@khris Sì, il link nell'eccezione si trova, non ci sono soluzioni alternative menzionate nei documenti. Puoi, tuttavia, provare la soluzione menzionata nella mia risposta nelle sezioni 2 e 3, questo è probabilmente il bug che stai vedendo. –

1
WebDriver driver = new FirefoxDriver(); 
WebElement inputhandler = driver.findelement(By.linktext("whatever here")); 
inputhandler.click(); 
String parentHandle = driver.getWindowHandle(); 
Set<String> PopHandle = driver.getWindowHandles(); 
Iterator<String> it = PopHandle.iterator(); 
String ChildHandle = ""; 
while(it.hasNext()) 
{ 
    if (it.next() != parentHandle) 
    { 
     ChildHandle = it.next().toString(); 
     // because the new window will be the last one opened 
    } 
} 
driver.switchTo().window(ChildHandle); 
WebDriverWait wait1 = new WebDriverWait(driver,30); 
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.id("something on page"))); 

// do whatever you want to do in the page here 

driver.close(); 
driver.switchTo().window(parentHandle); 
Problemi correlati