Selenium Webdriver warten auf element klicken?
Habe ich die Suche nach einer Lösung für dieses, aber ohne Erfolg. Ich habe einen button ich klicke, das ist manchmal eine lange Weile, bis die Daten zurückgeben, und der Fahrer ist timing und nur die Tötung der app denke ich.
Ich versuche, mit der WebDriverWait Klasse, um dies zu erreichen, aber die Click () - Methode ist nicht verfügbar in der Art, wie ich bin, es zu benutzen.
WebDriverWait wait = new WebDriverWait(browser, new TimeSpan(0, 5, 0));
bool clicked = wait.Until<bool>((elem) =>
{
elem.Click(); //Doesn't Work
return true;
});
Den ImplicitlyWait () - Methode ist nur für das warten auf die Elemente, um zu laden, aber dieses mal auf Klicken Sie auf(), also kann es nicht schauen, auch für ein element.
Den SetScriptTimeout () - Methode funktioniert einfach mit dem ausführen von javascript, was ich nicht mache.
Kennt jemand einen Weg, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen Sie dies :
Element kann die ID eines Elements präsentieren Sie auf der nächsten Seite umgeleitet werden .
Sobald die Seite geladen ist voll dann wird es beginnen die Ausführung Ihres code .
Statt
Click
könnten Sie versuchen, zu verwendenSendKeys
. Im Gegensatz zuClick
,SendKeys
nicht warten, bis die Seite geladen ist, vor dem fortsetzen der Ausführung von code. So können Sie etwas wie das hier tun:Als seitliche Anmerkung, ich bin mir ziemlich sicher, dass
Until
nimmt in einemIWebBrowser
als input, nicht ein element, das ist, warum Sie können nicht, klicken Sie aufelem
.ExecuteScript
ausführen klicken, so etwas wie:driver.ExecuteScript("$(arguments[0]).click()", elem);
Froh, dass Sie fand einen workaround für jetzt aber.Neben prestomanifesto die Lösung, die ich anbieten kann eine weniger als ideale Lösung, die ich implementiert, um dieses Problem zu lösen. Es stellt sich heraus, es ist eine Ausnahme - Keine Antwort etc... - so bin ich nur umgeben Sie in einem try-catch wartete dann das popup zu schließen, das scheint gut zu funktionieren.
Ersetzen können, was Sie wollen in Ihrer Schleife, so stellen Sie sicher, setzen Sie einen Zähler, damit es nicht in einer Endlosschleife landen.
Ich benutze dieses script :
RepeatUntil-Erweiterung-Methode mit LINQ, Lambda-Ausdrücke
Kopieren Sie diesen code, um Ihr Projekt:
Nennen es die Verwendung dieser syntax:
Hinweis: Im obigen Beispiel übergeben wir in einem PageObjectType aber Sie könnte sich ändern, dieser Typ IWebDriver oder Ereignis IWebElement. Alle Typ-parameter erlaubt es Ihnen, dies zu nutzen als eine Erweiterungsmethode für den Typ, den Sie angeben.
Beachten Sie die Flexibilität der Erweiterung-Methode, die der Aufrufer kann bestimmen, die Sammlung sowie die Komparator.