Was ist der beste Ansatz für Timeout mit Selen mit Webdriver
Habe ich ein problem. Meine web-Seite hat eine DropDownList
Kontrolle. Sobald die DropDownList
Wert ändert (indem Sie einen anderen Wert), wird die Seite aktualisiert und es rendert den Inhalt.
Und dann muss ich das mit Thread.Sleep(2000);
vor es geht und FindElement
.
Meine Frage: Was ist der beste Weg, zu warten, bis die Seite geladen wird?
Ich habe so viele Fälle von Thread.Sleep(2000)
in meinem code, ich bin Anfang zu denken, das ist nicht die beste Herangehensweise an das problem.
Hier ist mein code:
[TestInitialize()]
public void Setup()
{
if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.IE))
{
driver = new InternetExplorerDriver();
}
else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.CHROME))
{
//driver = new ChromeDriver();
}
else if (BaseIntegrationTest.browserType.Equals(BaseIntegrationTest.FIREFOX))
{
driver = new FirefoxDriver();
}
}
Und der zweite Teil:
[TestMethod]
public void testVerifyData()
{
//...................
//...................
driver.FindElement(By.XPath("//*[@id='ctl00_NavigationControl1_lnke']")).Click();
Thread.Sleep(2000);
//select from the dropdownlist.
IWebElement catagory = driver.FindElement(By.Id("ctl00_ContentPlaceHolder1_Filter"));
SelectElement selectCatagory = new SelectElement(catagory);
selectCatagory.SelectByText("Employee");
Thread.Sleep(2000);
//...................
//...................
}
InformationsquelleAutor Nick Kahn | 2012-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Thread.Sleep() ist ein sehr entmutigt Weg zur Umsetzung Ihrer wartet
Dieser code ist auf der skizzierten Selen Dokumentation http://seleniumhq.org/docs/04_webdriver_advanced.html
Ist ein Beispiel für eine explizite warten, wo Selen wird nicht ausgeführt, alle Aktionen, bis ein element gefunden wird
Ein Beispiel für eine implizite warten, ist:
Im impliziten wartet der Fahrer wartet für eine bestimmte Zeit und eine Umfrage der DOM für alle Elemente, die nicht existieren.
BEARBEITEN
Np, die Antwort akzeptieren, wenn Sie es mögen XD. Es muss nur ein Objekt, wenn Sie wollen resue dann können Sie nur Futter das Objekt eine id als argument oder was auch immer und Sie wiederverwenden, Wann immer Sie brauchen. Das ist das, was ich getan habe, mit allen meinen wartet
Können Sie zeigen, wie Sie das getan haben?
..err, wenn Ihr das nötig ist...
einfach nur neugierig zu wissen, sollte ich es einwickeln
WaitForElement
für alle die Ids oder nur die Ids, die Zeit? oder was ist die beste Praxis..InformationsquelleAutor Greg
Ich lösen dieses problem durch die Verwendung WebDriverWait zu.
Aber ich warten, bis das Letzte element angezeigt (BSP: die Fußzeile, das Letzte Element in der Liste).
oder
InformationsquelleAutor lct_005
Gibt es einige Fälle, in denen Sie warten müssen, in welchem Fall die Aufgabe.Delay-Methode wird mehr vorhersagbare Ergebnisse als Thread.Schlaf
Aufgabe.Delay(1000).Wait(); //1 Sekunde Warten
InformationsquelleAutor Lars
Unter der Annahme, dass die refresh-bedingt durch die Interaktion ist etwas, das Selen erkennen kann, dann die folgende Methode wird wahrscheinlich das tun, was Sie müssen:
waitForPageToLoad
Soweit ich weiß, ist diese Methode prüft den Zustand innerhalb des Browsers, um zu sehen, wenn der browser meint, es ist das laden etwas, und wartet, bis dieser Status ist deaktiviert. Jedoch, diese bereit-Zustand ist eine Art von alt - es gibt so viele Möglichkeiten, um dynamisch eine Seite zu laden oder einen Teil einer Seite, der Zustand ist nicht immer eine genaue Darstellung von, was Los ist.
Wenn Sie wissen, was Los ist zu ändern, wie ein Ergebnis Ihrer Aktion -, wenn Sie wissen, dass nach der Interaktion mit dem drop-down-Liste, spezifische UI-Elemente angezeigt, die waren nicht auf der Seite vor - dann würden Sie wahrscheinlich besser dran, zu warten, für diejenigen, die bestimmte UI-Elemente angezeigt werden. Sie könnten dies tun, indem er eine Methode, die immer wieder überprüft isTextPresent und wartet in kleinen Schritten, bis entweder ein timeout erreicht ist oder das erwartete element angezeigt wird. Es gibt auch andere "X Vorhanden" Methoden, die verwendet werden können in diesen Methoden, die Sie finden können, anderswo in der Selen-Schnittstelle, die ich verlinkt.
Hoppla. Ich bin nur der Sprung ins Selen wieder nach langer Abwesenheit. Habe eine Menge zu lernen. 🙂 Vielen Dank!
InformationsquelleAutor James Martineau
wenn Sie wünschen, erhalten Sie html-Seite geladen wird, oder das timeout abgelaufen ist:
InformationsquelleAutor razon
Machte ich eine benutzerdefinierte Funktion für mich selber, vielleicht wird es hilfreich sein für jemanden:
InformationsquelleAutor Rollaz