2016-04-25 3 views
1

Ich habe ein Problem, die Anzahl der Zeilen in einer Tabelle in einer assert-Anweisung zu erhalten. Der folgende Code funktioniert einwandfrei, wenn im Debug ausgeführt wird, schlägt jedoch fehl, wenn ich normal ausführe.Fehler beim Abrufen der Anzahl der Elemente in einer Tabelle

WebElement table = this.getDriver().findElement(By.className("table")); 
int numOfRowBegining = table.findElements(By.tagName("tr")).size(); 

addTemplate(); 

table = this.getDriver().findElement(By.className("table")); 
int numOfRowAfterAdding = table.findElements(By.tagName("tr")).size(); 
assertEquals(numOfRowBegining + 1, numOfRowAfterAdding); 

addtemplate() fügt die Tabelle, die ein Element. Das Problem ist mit dem Wert von numOfRowAfterAdding.

schätzen ich Hilfe

Antwort

0

Der folgende Code funktioniert gut, wenn im Debug ausgeführt wird.

Dies ist ein wichtiger Hinweis. Im Debug-Modus haben Sie eine Verzögerung zwischen den nachfolgenden Befehlen, die das Laden der Seite/Elemente ermöglichen. Wenn Sie Ihren Code in einem normalen Modus ausführen, haben Sie das nicht. Mit anderen Worten, dies ist ein Timing-Problem und Sie sollten mit expliziten Wartezeiten WebDriverWait untersuchen.

In welchem ​​Zustand Sie in Ihrem Fall warten müssen, ist nicht ganz klar. Es hängt davon ab, was innerhalb addTemplate() Funktion passiert. Wenn es ein Spinner oder eine Ladeanzeige gibt, können Sie darauf warten, dass sie über invisibilityOfElementLocated unsichtbar wird.

Oder Sie können auch eine benutzerdefinierte erwartete Bedingung schreiben, um auf die Anzahl der Zeilen in der Tabelle zu warten, die größer als zuvor ist.

+0

Vielen Dank für Ihre Hilfe, ich werde in der Zukunft betrachten – Carina

0

Sie sollten warten, bis die Tabelle vollständig geladen ist. Zuerst ein Element finden, die zu Tisch Laden dh das Element beziehen, die nur sichtbar sind, wenn der Tisch vollständig geladen ist und dann Code-Schnipsel verwenden:

 WebDriverWait wait = new WebDriverWait(driver, MAXIMUM_TIME_EXPECTED_TO_WAIT); 
     wait.until(ExpectedConditions.visibilityOfElementLocated(your_elem)); 
+0

Ihre Antwort war hilfreich, vielen Dank! – Carina