2016-12-20 4 views
0

Ich bin auf einer Website testen, die manchmal wirklich eine gute Verbindung haben. Alles funktioniert gut, bis es sich entscheidet, nicht richtig zu arbeiten. Ich trennte jedes Element mit einem wait.until, alles funktioniert normal, bis die Verbindung langsam wird und es glaubt, dass das Element vorhanden ist und beschließt, es zu verwenden.Java Selen - Warten auf langsamen Websites

public static WebElement login_btn(WebDriver driver, WebDriverWait wait) { 
    wait.until(ExpectedConditions.refreshed(ExpectedConditions.presenceOfElementLocated(By.id("btnEntrar")))); 
    wait.until(ExpectedConditions.refreshed(ExpectedConditions.elementToBeClickable(By.id("btnEntrar")))); 
    element = driver.findElement(By.id("btnEntrar")); 
    return element; 
} 

kann ich nicht einen Weg zu simulieren, diese finden, bis die Webseite schrecklich langsam wird und ich zu sehen, ob es funktioniert oder nicht. Nach monatelangem Versuch kann ich keine Möglichkeit finden, vollständig darauf zu warten, dass das Element vorhanden ist, und keine staleElementReferenceException zu erhalten, da die Site aufgrund der Verwendung eines Elements tatsächlich in eine Fehlerseite mündet. Wenn Sie die Website manuell ohne diese Tests verwenden, können Sie nicht simulieren, was mit dem Webdriver passiert. Gibt es Hinweise oder Vorschläge, was ich tun könnte?

+0

Haben Sie versucht, einen Proxy wie Browsermob zu verwenden. Du kannst deine Verbindungsgeschwindigkeit drosseln und testen, wie dein Test auf eine langsame App reagiert ... – Grasshopper

+0

@Grasshopper Das klingt nach einer guten Idee, ich werde es versuchen. – SunnyH

Antwort

0

Es gibt ein paar gute Antworten, die Sie in this question und this question versuchen können. Eine besteht darin, Chrome-Dev-Tools zum Drosseln zu verwenden, um die Download-Geschwindigkeit anzupassen, https://stackoverflow.com/a/34728002/2386774. Ein anderer ist Charles Web Debugging Proxy.

Um dieses Problem einfacher zu lösen, ist mein Vorschlag, speziell darauf zu warten, dass die Seite vollständig geladen wird und dann die Seite abkratzt. Dies ermöglicht es Ihnen, einmal zu warten und dann müssen Sie keine Wartezeiten überall hinzufügen. Sie müssen zusätzliche Wartezeiten hinzufügen, wenn Ihre Seite dynamisch ist, z. Sie klicken auf eine Schaltfläche und es aktualisiert einen Teil der Seite. Fügen Sie in diesem Fall eine Wartezeit hinzu, wenn auf die Schaltfläche geklickt wird und Sie wieder gut sind. Keine Notwendigkeit, Wartezeiten überall hinzuzufügen.

+0

Ich werde versuchen, diese zu testen. Vielen Dank! – SunnyH

+0

EDIT: Ich warte schon auf die Seite zu laden einmal am Anfang, aber ich habe es mit vielen dynamischen Elementen, die zu aktualisieren, wie ich in sie eingeben oder andere auswählen. Während es manchmal wartet, scheint es als vorhanden und geladen zurückzukehren, aber einige Millisekunden später ist es wieder veraltet. Ich rate, wie die Website codiert ist, um Informationen zu erhalten, um sie vielleicht zu aktualisieren. – SunnyH

+0

Ein Trick, den Sie verwenden können, um mit wirklich dynamischen Seiten zu helfen, besteht darin, auf ein veraltetes Element zu warten. Zum Beispiel gibt es ein Element auf der Seite, die Sie aktualisieren möchten und dann die aktualisierte Information erhalten. Das Problem ist, dass wenn Sie das Element vor der Aktualisierung greifen, erhalten Sie die alte Information oder Sie erhalten eine veraltete Referenz. Der Trick besteht darin, auf das veraltete Element zu warten und darauf zu warten, dass es sichtbar ist. – JeffC