2012-12-18 20 views
11

Sono riuscito a passare al Dialogo modale del dato esempioCome gestire ModalDialog usando il webdriver al selenio?

http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/showModalDialog2.htm

non so come ottenere elemento sulla finestra di dialogo modale

enter image description here

+0

Verificare sul link qui sotto per una migliore comprensione di come gestire le finestre di dialogo modali o pop up utilizzando selenium2.0 http://www.thoughtworks-studios.com/twist/2.3/help/how_do_i_handle_popup_in_selenium2.html – Hemanth

risposta

15

Usa

seguenti metodi per passare a modelframe

driver.switchTo().frame("ModelFrameTitle"); 

o

driver.switchTo().activeElement() 

Spero che questo funzionerà

+0

Ho provato entrambi ma nessuno di questi funzionava. Potete per favore provarlo e fammi sapere –

+2

@ Jasmine.Olivra, hai accettato la risposta, ma allo stesso tempo hai detto che "* nessuno di questi funziona *". Quindi sta funzionando per te o no? –

+0

Sto facendo lo stesso in python, ma la mia affermazione è: driver.switch_to_window (activeElement()) .... Tuttavia sto ottenendo l'errore: driver.switch_to_window (activeElement()). Potete fornire qualche suggerimento? – engineer

0

provare questo codice, inserisci la tua nomi degli oggetti & variabile da lavorare.

Set<String> windowids = driver.getWindowHandles(); 
Iterator<String> iter= windowids.iterator(); 
for (int i = 1; i < sh.getRows(); i++) 
{ 
while(iter.hasNext()) 
{ 
System.out.println("Main Window ID :"+iter.next()); 
} 
driver.findElement(By.id("lgnLogin_UserName")).clear(); 
driver.findElement(By.id("lgnLogin_UserName")).sendKeys(sh.getCell(0, 
i).getContents()); 
driver.findElement(By.id("lgnLogin_Password")).clear(); 
driver.findElement(By.id("lgnLogin_Password")).sendKeys(sh.getCell(1, 
i).getContents()); 
driver.findElement(By.id("lgnLogin_LoginButton")).click(); 
Thread.sleep(5000L); 
      windowids = driver.getWindowHandles(); 
    iter= windowids.iterator(); 
    String main_windowID=iter.next(); 
    String tabbed_windowID=iter.next(); 
    System.out.println("Main Window ID :"+main_windowID); 
    //switch over to pop-up window 
    Thread.sleep(1000); 
    driver.switchTo().window(tabbed_windowID); 
    System.out.println("Pop-up window Title : "+driver.getTitle()); 
1

Quello che si sta utilizzando non è una finestra di dialogo modello, è una finestra separata.

di questo codice:

private static Object firstHandle; 
private static Object lastHandle; 

public static void switchToWindowsPopup() { 
    Set<String> handles = DriverManager.getCurrent().getWindowHandles(); 
    Iterator<String> itr = handles.iterator(); 
    firstHandle = itr.next(); 
    lastHandle = firstHandle; 
    while (itr.hasNext()) { 
     lastHandle = itr.next(); 
    } 
    DriverManager.getCurrent().switchTo().window(lastHandle.toString()); 
} 

public static void switchToMainWindow() { 
    DriverManager.getCurrent().switchTo().window(firstHandle.toString()); 
0

ho provato, funziona per voi.

String mainWinHander = webDriver.getWindowHandle(); 

// code for clicking button to open new window is ommited 

//Now the window opened. So here reture the handle with size = 2 
Set<String> handles = webDriver.getWindowHandles(); 

for(String handle : handles) 
{ 
    if(!mainWinHander.equals(handle)) 
    { 
     // Here will block for ever. No exception and timeout! 
     WebDriver popup = webDriver.switchTo().window(handle); 
     // do something with popup 
     popup.close(); 
    } 
} 
1

Try the below code. It is working in IE but not in FF22. Ifdialogo modale trovatois printed in Console, then Modal dialog is identified and switched.

public class ModalDialog { 

     public static void main(String[] args) throws InterruptedException { 
      // TODO Auto-generated method stub 
      WebDriver driver = new InternetExplorerDriver(); 
      //WebDriver driver = new FirefoxDriver(); 
      driver.get("http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/showModalDialog2.htm"); 
      String parent = driver.getWindowHandle(); 
      WebDriverWait wait = new WebDriverWait(driver, 10); 
      WebElement push_to_create = wait.until(ExpectedConditions 
        .elementToBeClickable(By 
          .cssSelector("input[value='Push To Create']"))); 
      push_to_create.click(); 
      waitForWindow(driver); 
      switchToModalDialog(driver, parent); 

     } 

     public static void waitForWindow(WebDriver driver) 
       throws InterruptedException { 
      //wait until number of window handles become 2 or until 6 seconds are completed. 
      int timecount = 1; 
      do { 
       driver.getWindowHandles(); 
       Thread.sleep(200); 
       timecount++; 
       if (timecount > 30) { 
        break; 
       } 
      } while (driver.getWindowHandles().size() != 2); 

     } 

     public static void switchToModalDialog(WebDriver driver, String parent) { 
       //Switch to Modal dialog 
      if (driver.getWindowHandles().size() == 2) { 
       for (String window : driver.getWindowHandles()) { 
        if (!window.equals(parent)) { 
         driver.switchTo().window(window); 
         System.out.println("Modal dialog found"); 
         break; 
        } 
       } 
      } 
     } 

    } 
0

Supponendo che l'aspettativa è solo andare a essere due finestre popping up (uno dei genitori e uno per il pop-up), poi basta aspettare due finestre per uscire, trovare l'altra maniglia della finestra e passare ad essa.

WebElement link = // element that will showModalDialog() 

// Click on the link, but don't wait for the document to finish 
final JavascriptExecutor executor = (JavascriptExecutor) driver; 
executor.executeScript(
    "var el=arguments[0]; setTimeout(function() { el.click(); }, 100);", 
    link); 

// wait for there to be two windows and choose the one that is 
// not the original window 
final String parentWindowHandle = driver.getWindowHandle(); 
new WebDriverWait(driver, 60, 1000) 
    .until(new Function<WebDriver, Boolean>() { 
    @Override 
    public Boolean apply(final WebDriver driver) { 
     final String[] windowHandles = 
      driver.getWindowHandles().toArray(new String[0]); 
     if (windowHandles.length != 2) { 
      return false; 
     } 
     if (windowHandles[0].equals(parentWindowHandle)) { 
      driver.switchTo().window(windowHandles[1]); 
     } else { 
      driver.switchTo().window(windowHandles[0]); 
     } 
     return true; 
    } 
}); 
Problemi correlati