2017-07-05 1 views
0

Dies ist die Logik, die ich versuche zu implementieren. Ich drücke eine Registerkarte in einer Seite und wenn es eine Fehlermeldung gibt, I System.out.println eine benutzerdefinierte Fehlermeldung an die Konsole. Wenn die Fehlermeldung nicht auftritt, fahre ich mit anderen Funktionalitäten fort.Kann ich Thread.Sleep verwenden, wenn das Lade-Spinner und die Fehlermeldung das gleiche Element xpath hat?

Das Problem ist, nachdem ich auf die Registerkarte klicken, gibt es einen Spinner, der vor dem Laden der Daten lädt. Xpath für den Spinner und die Fehlermeldung ist identisch. Wenn der WebDriver den Spinner sieht, erkennt er dies als Fehler und gibt mir eine Fehlermeldung.

Wenn ich ein Thread.Sleep dazwischen hinzufüge, dann identifiziert es den geladenen Abschnitt und gibt mir die Fehlermeldung nicht.

Abgesehen von Thread.sleep, kann ich alles tun, um zu warten, bis die Daten nach dem Spinner korrekt geladen werden?

private Boolean BenInErr() throws InterruptedException 
{ 
    try { 
     Thread.sleep(4000); 
     WebDriverWait BErr = new WebDriverWait (driver, 10); 
     WebElement BErrText = driver.findElement(By.xpath("//div[@id='plan-details-benefits-and-cost-content']/div/services-list/div/mc-loading-error/div/div/span")); 
     //String Text = BErrText.getText(); 
     BErr.until(ExpectedConditions.visibilityOf(BErrText)); 
     return BErrText.isDisplayed(); 
    } 

    catch (Exception Ex1) 
    { 
     System.out.println("Benefit information is available"); 
     return false; 
    } 
} 

public void mngBenInfErr() throws InterruptedException 
{ 
if (BenInErr()) 
{ 
    System.out.println("There is an error in Benefits & Coverage tab in Benefit information section"); 
} 
} 
+0

Wenn das Problem um die Fehlermeldung und Spinner werden über den gleichen XPath-Ausdruck dreht identifiziert Hast du dann überlegt, Ausdrücke zu verwenden, die nur dem einen oder anderen entsprechen? Dies sollte möglich sein, ohne das Dokument zu ändern, in dem die Ausdrücke aufgelöst werden, aber es könnte einfacher durchgeführt werden, wenn Sie das Dokument ändern können, um die Zielelemente besser voneinander zu unterscheiden. –

+0

Ich sehe, dass Sie die ExpectedConditions-Klasse verwenden. In C# haben wir 'ExpectedConditions.TextToBePresentInElement' - wenn Ihnen etwas in Java zur Verfügung steht, scheint es eine gute Sache zu sein, Ihr WebDriverWait zu umschließen. – Arman

+0

Cool. Vielen Dank. Ich bekam einen Hinweis von Arman's Kommentar und benutzte den untenstehenden Code, um das Thread.sleep zu entfernen. \t \t \t Rückgabe Text.equalsIgnoreCase ("Fehler beim Laden der Benefit-Informationen."); Vielen Dank. –

Antwort

0

Ich würde vorschlagen, eine Warte Methode dafür zu schreiben, wieder verwenden Sie können später, zum Beispiel:

public static void waitForLoaderToDisappear() { 
    _wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id(YOURLOADERID))); 
} 
+0

'_wait' ist nicht kompatibel mit den Java-Namenskonventionen. –

Verwandte Themen