2016-05-13 13 views
0

Der Versuch, neue Fenster Tab zu wechseln und dann ein Element aus Dropdown-Liste auswählen nicht funktioniert ..WebDriver - Umschalten auf neue Fenster und Auswahl Dropdown funktioniert nicht in IE

public static void handleNewTabWindow() { 
    driver.findElement(By.xpath(".//img[@src='/images/buttons/gl_upload.gif']")).click(); 
    String Parent_Window = driver.getWindowHandle(); 
    for (String Child_Window : driver.getWindowHandles()) { 
     driver.switchTo().window(Child_Window); 
     WebElement dropdown = getWhenVisible(By.xpath(".//select[@name='UPLOAD_ORG_ID']")); 
     dropdown.click(); 
     getWhenVisible(By.xpath(".//option[contains(text(), 'CI Borrower')]")).click(); 
    } 
    driver.switchTo().window(Parent_Window); 
    driver.close(); 
} 

Antwort

0

Sie, bis eine neue warten müssen Das Fenster wird auf dem Bildschirm angezeigt, bevor Sie zu ihm wechseln. Ihr Code versucht sofort nach dem Klicken auf die Schaltfläche zu wechseln, in ein paar Millisekunden - der Browser ist nicht so schnell, Sie müssen ein paar Sekunden oder so warten.

A nicht sehr elegant, aber eine schnelle Lösung ist ein festes Thread.sleep(2000); hier vorstellen:

driver.findElement(By.xpath(".//img[@src='/images/buttons/gl_upload.gif']")).click(); 
Thread.sleep(2000); 
String Parent_Window = driver.getWindowHandle(); 

aber sehr gut funktioniert nicht.


Eine bessere Lösung ist es, ein Verfahren zu implementieren, bis ein neues Fenster auf dem Bildschirm erscheint warten wird (aber nicht mehr als einige festen Timeout - etwa 30 bis 60 Sekunden). Zum Beispiel eine der am häufigsten verwendeten Methode in unserem Projekt ist eine Methode, die mit einem bestimmten Titel, so etwas wie dieses (Code Skelett) für ein Fenster wartet:

void waitForWindowWithTitleAndSwitchToIt(String windowTitle, int timeoutInSeconds){ 
    .... 
    while(timeout-not-expired){ 
     handles = driver.getWindowHandles(): 
     for(String handle: handles){ 
     driver.switchTo.window(handle); 
     if(driver.getTitle().contains(windowTitle)){ 
      // found a window with a given title 
      return; 
     } 
     } 
     sleep(for a 1-2 seconds); 
     // and try again 
    } 
    throw new TimeoutException(
      String.format("A browser window named %s doesn't appear on the screen", windowTitle) 
     ); 
    } 

wir ein paar solche Methoden in unserem Projekt umgesetzt haben , die auf ein neues Fenster warten, das verschiedene Kriterien verwendet: auf ein Fenster mit einem bestimmten exakten Titel warten, für ein Fenster, das einen Titel enthält, der eine gegebene Teilzeichenkette für ein Fenster mit einer gegebenen Zeichenkette in der Seitenquelle enthält (Sub-) String in der URL usw.