2017-06-05 1 views
0

Ich versuche den Anmeldevorgang auf einer Webseite mit Selen und Chrome-Treiber zu automatisieren. Das Anmeldeelement für die Webseite sieht folgendermaßen aus:So stellen Sie sicher, dass ein Button-Klick von einer Webseite verarbeitet wird, bevor Sie mit der Automatisierung selen fortfahren

<div class="button small"><a class="btn-login" href="#">Login</a></div> 

Also ich klicke es mit dem folgenden;

bot.FindElement(By.LinkText("Login")).Click() 

Wo 'Bot' ist mein Chrome-Treiber. Dies funktioniert, 100% der Zeit klickt es auf die Schaltfläche. Ich würde jetzt gerne den nächsten Schritt der Prozesse automatisieren, aber hier habe ich einen Haken gefunden. Wenn Sie auf die Schaltfläche klicken, wird keine neue Webseite geladen, sondern lediglich ein Skript auf der Seite ausgeführt, auf das ich eine andere Schaltfläche klicken muss (wählen Sie im Prinzip den Bereich aus, in dem ich mich anmelden möchte). Wie kann ich warten, bis die Webseite den ersten Klick verarbeitet hat, damit ich den nächsten Klick verarbeiten kann. Wenn ich den nächsten Klick versuche, bekomme ich diesen Fehler;

System.InvalidOperationException: 'unknown error: Element <a class="area-select" href="/page/area/start">...</a> is not clickable at point (542, 318). Other element would receive the click: <div class="right login">...</div> 


(Session info: chrome=58.0.3029.110) 
    (Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 10.0.15063 x86_64)' 

Ich weiß nicht wirklich, was dieser Fehler bedeutet. Es sieht so aus, als ob die Schaltfläche, auf die ich klicken möchte, nicht anklickbar ist (aber ich kann sie manuell im Browser anklicken), also nehme ich an, dass das Element nicht aktiviert wird, wenn ich den Befehl sende? Wenn ja, wie kann ich bis dahin warten?

+0

Wenn ich gebraucht habe eine ähnliche Sache zu tun, die ich gefunden habe, dass der Faden zu sagen für eine kleine Weile schlafen (vielleicht eine Sekunde oder so) vor dem Fortfahren funktioniert normalerweise. Sie könnten auch ein Do-While versuchen, aber stellen Sie sicher, dass das, was Sie tun, nicht ressourcenintensiv ist. – Jaxi

Antwort

0

Versuchen befire klicken

0

Plz versuchen, den Code unten einige harte Wartezeit oder gelten einige implizite Wartezeit für dieses spezielle Element einzufügen. Es wird eine implizite Warte umfassen, bis der Link/klickbare zu klicken versuchen wird aktivieren:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
wait.Until<IWebElement>((d) => 
{ 
IWebElement element = d.FindElement(By.Id("myid")); 
if (element.Displayed && element.Enabled) 
{ 
    return element; 
} 

return null; 
}); 
Verwandte Themen