2016-07-20 17 views
1

Ich versuche, eine Aktion in Selenium durchzuführen, wo es warten würde, bis der Status in bestimmten "Fertig" Status wechselt.Selen bedingte Wartezeit mit Zwischenaktion

Konzeptionell kann es in wie diese Pseudo-Code angelegt werden:

public boolean waitForActionToComplete(long maxTimeoutInSeconds, int repeatTimeInSeconds, Callable<T> action, Callable<T> condition) { 
    long startTime = 0; 
    while (startTime < maxTimeoutInSeconds) 
     perform <action>;     // e.g., click on a "Refresh" button to refresh the results 
     boolean done = verify <condition>; // e.g., check whether the job status is "Done" 
     if (done)   
      return true;     // if done, then exit with TRUE 
     else 
      Thread.sleep(repeatTimeInSeconds); 
    end while; 

    return false;       // status still not complete, timeout gracefully 
} 

Diese Methode wahrscheinlich mit ExpectedCondition in etwas leicht umgesetzt werden kann und WebdriverWait/FluentWait. Aufgrund bestimmter Einschränkungen im Framework kann ich die Methode jedoch nicht genau so implementieren und verwenden. Das obige Verfahren müßte umgesetzt werden, da dies (eine Schnittstelle im Rahmen implementiert diese Methode Signatur mit):

public void execute(final WebDriver webDriver, String... parameters) { 
// implementation here 
} 

Kann mir jemand sagen, wie die Methode in der Form oben angegeben zu verwandeln?

+0

Sie untersuchen sollten [WebDriverWait] (https : //seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html) und [FluentWait] (https://seleniumhq.github.io/selenium/docs/ api/java/org/openqa/selen/unterstützung/ui/FluentWait.html). – JeffC

+0

Danke JeffC. Ich schätze es. Es macht Sinn. Ich dachte mir, ich hätte die obige Problembeschreibung nicht. Ich habe es jetzt abgeschlossen. – naspras

+0

Sie können immer noch das tun, was Sie mit einem FluentWait beschrieben haben. Sie müssen es nur selbst implementieren mit den Besonderheiten auf was auch immer verifizieren ist. – JeffC

Antwort

1

Ich versuche eine Aktion in Selenium durchzuführen, wo es warten würde, bis der Status in den Status "Fertig" wechselt.

Dieses einfach erreicht werden konnte WebDriverWait mit ExpectedConditions.textToBePresentInElementLocated mit insteadof Erstellen von eigenen benutzerdefinierten Methode waitForActionToComplete wie folgt: -

WebDriverWait wait = new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.textToBePresentInElementLocated(byObject, "Finished")); 

Hoffe, es hilft ... :)