2016-04-05 6 views
0

Wir haben eine Funktion, die Kundenfeedback sammelt. Wenn sich der Benutzer abmeldet, erscheint ein Fenster zufällig - nicht jedes Mal für jeden Kunden. Ich möchte das in meinem Automatisierungscode behandeln.Selen: Behandeln Sie ein Fenster, das nach dem Zufallsprinzip auftaucht

Momentan erwarte ich beim Abmelden ein Fenster und wechsle zu diesem, und dieser Code schlägt fehl, wenn das Popup-Fenster nicht erscheint.

Was ist der beste Weg, damit umzugehen.

Das ist, was ich bisher habe ...

public static void waitForNumberOfWindowsToEqual(final int numberOfWindows) { 


    ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() { 
     public Boolean apply(WebDriver driver) { 
      return (driver.getWindowHandles().size() == numberOfWindows); 
     } 
    }; 

    WebDriverWait wait = new WebDriverWait(driver, BrowserFactory.explicitWait); 


    wait.until(expectation); 
} 

Antwort

1

Ich würde die Abwesenheit von Popup-Fenster mit einem Versuch/Catch behandeln. Hier ein Beispiel:

try { 
    WebDriverWait winwait = new WebDriverWait(driver, 3); 
    String mainWindow = driver.getWindowHandle(); 

    // wait for 2 windows and get the handles 
    Set<String> handles = winwait.until((WebDriver drv) -> { 
     Set<String> items = drv.getWindowHandles(); 
     return items.size() == 2 ? items : null; 
    }); 

    // set the context on the last opened window 
    handles.remove(mainWindow); 
    driver.switchTo().window(handles.iterator().next()); 

    // close the window 
    driver.close(); 

    // set the context back to the main window 
    driver.switchTo().window(mainWindow); 

} catch (TimeoutException ex) { 
    System.out.println("No window present within 3 seconds"); 
} 
+0

Ist die Aktion (Abmeldung in meinem Fall) im Code fehlt? – Girish

+0

In diesem Beispiel sollte die Abmeldeaktion kurz vor dem Versuch platziert werden. –

1

Wenn möglich, die ideale Sache zu tun wäre, einen Blick durch die Quelle zu haben, um herauszufinden, ob das Popup-Fenster erscheint, aber wenn Dies ist nicht erreichbar, Sie könnten den folgenden Ansatz verwenden:

0

Falls Sie nicht die erforderlichen Fenster bekommen, wird der Code ein TimeoutException werfen. Also, setzen Sie wait.until(expectation) in einen Versuch Block und fangen Sie die Ausnahme. In Code,

try { 
    wait.until(expectation); 
} catch (TimeoutException ex) { 
    System.out.println("Nowindow This Time"); 
} 
Verwandte Themen