2017-01-05 7 views
-1

würde Ich mag wissen, ob es einen Weg mit XPath oder CssSelectors ist, wenn es eine konsistente Art und Weise ist zu warten, bis ein jQuery DataTable Belastung für die Verwendung mit Selen beendet hat.Warten Sie jQuery Datatable mit Selen geladen

+0

Teilen Sie einen Code. –

+0

keine Notwendigkeit, da alle jQuery DataTables das gleiche Skelett teilen –

Antwort

0

Siehe https://datatables.net/reference/event/processing.

Dieses Ereignis wird ausgelöst, wenn Tables ist eine Art der Verarbeitung zu tun - es sein, Sortierung, Filterung oder jede andere Art von Datenverarbeitungs

public static void WaitUntilDataTableHasFinishedLoading(this IWebDriver driver, IWebElement processingTable) 
    { 
     processingTable.WaitForAttribute("style", "display: none;"); 
    } 

Verbrauch:

 IWebElement x = SeleniumInfo.Driver.FindElement(By.Id("tableName_processing")); 
SeleniumInfo.Driver.WaitUntilDataTableHasFinishedLoading(x); 
1

Tables bietet eine initComplete function:

... zu wissen, wann hat Ihre Tabelle vollständig initialisiert wurde, geladene Daten und gezeichnet

Sie es mit dem Selen Warte kombinieren können() -> bis() Methode. Hier ist ein Beispiel mit PHP.

$this->webDriver->wait($timeoutInSeconds, $intervalInMilliseconds)->until(
     // a php anonymous function executed every $intervallInMilliseconds 
     // it tells Selenium to execute some JS in the brower 
     // when this methods returns true, Selenium stops waiting 
     function(){ 
      return 'loaded' === func_get_arg(0)->executeScript(
       // the javascript method provided by DataTable 
       "$('#dataTableId').dataTable({ 
        \"initComplete\": function(settings, json) { 
         return 'loaded'; 
        } 
       } 
      );"); 
     }, 
     "DataTable still not loaded after $timeoutInSeconds." 
); 

Wenn die Datentabelle geladen wird, das js $ (‚# dataTableId‘) Datatable() gibt ‚geladen‘ und die php anonyme Funktion gibt wahr und Selen aufhören zu warten. Wenn die DataTable nicht nach $ timeoutInSeconds Sekunden geladen wird, wird eine Ausnahme ausgelöst, wenn die "DataTable nach $ timeoutInSeconds noch nicht geladen ist". Botschaft.

Hoffe, das hilft.

+0

Danke. Ich werde prüfen, ob ich das irgendwie in C# arbeiten kann –

Verwandte Themen