2016-06-21 3 views
0

Ich schreibe meine erste Webdriver-Skript in Java, das Skript funktioniert gut, aber es ist sehr schnell.Gibt es eine Notwendigkeit, Wartezeiten zwischen dem Skript in webdriver

Für zB: - Ich habe Textfelder und Dropdown-Elemente in meiner hmtl Seite und ich schrieb das Skript für das Senden von Schlüsseln und Auswählen von Werten aus den Elementen, aber wenn ich das Skript ausführen, ist es sehr schnell gibt es irgendwelche implizite Wartezeiten danach jeder Schritt ? Lohnt es sich ? Oder was sonst ist die Lösung, damit das Skript reibungslos läuft, damit jeder Schritt richtig angezeigt wird.

Unten ist mein Code: -

public static void main(String[] args) { 

    WebDriver wb = new FirefoxDriver(); 
    wb.manage().window().maximize(); 
    wb.navigate().to("http://newtours.demoaut.com/"); 

    /*WebDriverWait wait1 = new WebDriverWait(wb, 50); 
    WebElement element1 = wait1.until(ExpectedConditions. 
    elementToBeClickable(By.xpath("//img[@alt='Mercury Tours']")));*/ 

    wb.findElement(By.xpath("//a[text()='REGISTER']")).click(); 

    wb.findElement(By.xpath("//input[@name='firstName']")).sendKeys("Rameshwari"); 
    wb.findElement(By.xpath("//input[@name='lastName']")).sendKeys("Nayak"); 
    wb.findElement(By.xpath("//input[@name='phone']")).sendKeys("7208471118"); 
    wb.findElement(By.xpath("//input[@id='userName']")).sendKeys("Rama"); 

    wb.findElement(By.xpath("//input[@name='address1']")).sendKeys("Nithyanand Chawl"); 
    wb.findElement(By.xpath("//input[@name='city']")).sendKeys("Mumbai"); 
    wb.findElement(By.xpath("//input[@name='state']")).sendKeys("Maharashtra"); 
    wb.findElement(By.xpath("//input[@name='postalCode']")).sendKeys("4000017"); 

    Select dd = new Select(wb.findElement(By.xpath("//select[@name = 'country']"))); 
    dd.selectByVisibleText("INDIA"); 

} 
+0

Sie möchten, dass Ihr Skript so schnell wie möglich ausgeführt wird. Ich würde ohne Wartezeiten beginnen und sehen, wie es funktioniert. Sie müssen es möglicherweise 50 Mal oder etwas ausführen, um zu sehen, ob Sie jemals Probleme haben. Hinzufügen wartet nur nach Bedarf und nur dort, wo es benötigt wird. Für den Code, den Sie oben haben, schätze ich, dass Sie überhaupt keine Wartezeiten benötigen. Die Zeiten, in denen Sie möglicherweise warten müssen, sind Vorgänge auf der Seite, die den Seiteninhalt ändert. Wenn Sie versuchen, mit dem geänderten Inhalt zu interagieren, müssen Sie wahrscheinlich warten, bis sich der Inhalt geändert hat, bevor Sie mit ihm interagieren. – JeffC

+0

Wenn Sie jeden Schritt zum Debuggen sehen möchten, setzen Sie Haltepunkte und gehen Sie durch den Code. Sie sollten nicht möchten, dass das Skript langsamer ist, damit Sie die Ausführung beobachten und sehen können, was vor sich geht. – JeffC

+0

@JeffC ohk danke – user2205230

Antwort

1

Sie können Ihren Bedarf alle unten wählen, basierend auf, aber nicht zugleich impliziten und expliziten wartet verwenden. Dies führt zu inkonsistenten Wartezeiten und kann zu TimeoutExceptions führen, auch wenn Sie der Meinung sind, dass keine vorhanden sein sollten.

Implizite Warten -

Eine implizite Warten ist WebDriver zu sagen, das DOM für eine gewisse Zeit abzufragen, wenn man versucht, ein Element oder Elemente zu finden, wenn sie nicht sofort verfügbar sind.

Die Standardeinstellung ist 0. Sobald wir die implizite Wartezeit definieren, wird sie auf die Lebensdauer der WebDriver-Objektinstanz festgelegt.

Es wird einmal geschrieben und automatisch für die gesamte Sitzung angewendet. Es sollte sofort angewendet werden, sobald wir den Webdriver initiieren.

Implizite Wartezeit funktioniert nicht alle Befehle/Anweisungen in der Anwendung. Es funktioniert nur für die Anweisungen "FindElement" und "FindElements".

Wenn wir implizites wait setzen, wird find-Element keine Ausnahme auslösen, wenn das Element nicht in der ersten Instanz gefunden wird, stattdessen wird das Element bis zum Timeout abgefragt und dann weiter verfahren.

Explicit Wait -

können Sie explizite wait verwenden, wenn Sie auf bestimmte Bedingung basierend warten wollen - wie visibilityOfWebElement, ElementToBeClickable usw.

WebDriverWait wait = new WebDriverWait(driver, 10); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("xyz"))); 

Explicit Warte meist verwendet, wenn wir brauchen, um Warten Sie auf eine bestimmte Inhalts-/Attributänderung, nachdem Sie eine Aktion ausgeführt haben, z. B. wenn die Anwendung dem System einen AJAX-Aufruf erteilt und dynamische Daten abruft und auf der Benutzeroberfläche rendert.

Beispiel: Wie Dropdown-Länder und -Staende ändern sich die Werte in der Dropdown-Liste für den Status. Dies dauert einige Sekunden, um die Daten basierend auf der Benutzerauswahl abzurufen.

fliessend Wait -

Mit FluentWait können wir die maximale Menge an Zeit definieren, für einen Zustand, zu warten, sowie die Häufigkeit, mit der für die Bedingung zu überprüfen.

Und auch der Benutzer kann konfigurieren, bestimmte Arten von Ausnahmen wie "NoSuchElementExceptions" bei der Suche nach einem Element zu ignorieren. NoSuchElement-Ausnahme wird von findElement (By) und findElements (By) ausgelöst.Wann immer es versucht, ein beliebiges Element zu finden, gibt es das erste übereinstimmende Element auf der aktuellen Seite zurück, ansonsten löst es NoSuchElementException aus - wenn keine übereinstimmenden Elemente gefunden werden.

+0

Vielen Dank für die detaillierte Erklärung, ich habe das verstanden, aber meine Frage ist, kann ich hinzufügen wartet nach jedem Schritt? Ist das ein gutes Scripting? Wie habe ich 5 Textfelder auf meiner Seite kann ich 5 Wartezeiten nach jedem Schritt hinzufügen, so dass jeder Schritt sichtbar ist? – user2205230

+0

Ja, wenn Ihr Test diese Wartezeit benötigt, bevor das Element sichtbar ist, ist es in Ordnung, diese Wartezeit vor jedem Schritt hinzuzufügen. Das heißt, ein explizites Warten. Wenn Sie eine implizite Wartezeit verwenden möchten, muss sie nur einmal festgelegt werden. – Mobrockers

+0

Wenn Sie implizites Warten verwenden, müssen Sie es nur einmal in Ihrem Code hinzufügen. Aber wenn Sie wollen, dass eine Bedingung für die Elemente gilt, die Sie bearbeiten (versuchen Wert zu finden oder einzugeben, klicken Sie auf etc.), sollten Sie explizit warten oder fließend warten. Explizite/fließende Wartezeiten müssen für einzelne Elemente hinzugefügt werden, abhängig von der Bedingung, die für das betreffende Element erfüllt sein soll. Ich hoffe, das hilft !! – vv88

-2

Wenn Sie die implizite Wait-Eigenschaft einmal in Ihrem Code angeben, ist dies für alle Anweisungen in Ihrem Code ausreichend. Sie müssen nur warten, wenn Sie ein Element wegen Seitenladen nicht finden können. Je schneller, desto besser, wenn das Skript wie erwartet funktioniert.

+0

Ja, das ist was, wir warten implizit darauf, nach dem Laden der Seite ein Element zu finden. Dieses Skript funktioniert ohne Wartezeit, aber die Ausführung ist sehr schnell, so dass ich nicht jeden Schritt sehen kann. Also gibt es einen Weg oder eine Lösung, dass mein Skript reibungslos läuft, so dass jeder Schritt sichtbar ist. – user2205230

+0

können Sie ** Thread.sleep (0500); ** nach jeder Anweisung wo immer Sie warten möchten. Dies wird die Ausführung für die vielen Millisekunden halten. wie in diesem wird es für 0500 Millisekunden halten. So können Sie den Lauf gut sehen. –

+0

Lohnt es sich, nach jedem Schritt einen Thread hinzuzufügen? Wenn ich mehr als 10 Schritte in meinem Skript habe und ich nach jedem Schritt einen Thread hinzufügen werde, wird mein Code richtig sein? – user2205230

Verwandte Themen