Element miga ze względu na funkcję sterownika IE o nazwie "uporczywe zawieszanie". Ta funkcja ma wątpliwą wartość, ale jest wymagana z powodu martwego w mózgu sposobu IE (przeglądarki, a nie sterownika) responds to WM_MOUSEMOVE
messages podczas korzystania z interfejsu API SendMessage
.
Masz kilka opcji. Można włączyć uporczywe najechania kursorem wyłączyć za pomocą kodu jak poniżej:
InternetExplorerOptions options = new InternetExplorerOptions();
options.EnablePersistentHover = false;
IWebDriver driver = new InternetExplorerDriver(options);
Należy pamiętać jednak, że będzie to narażać cię na kaprysy gdzie fizyczny kursor na ekranie jest wyświetlany podczas próby unosić. Jeśli to nie do przyjęcia, możesz wziąć couple of other approaches. Po pierwsze, możesz wyłączyć tak zwane "zdarzenia natywne", które spowodują, że sterownik będzie polegać wyłącznie na zsyntetyzowanych zdarzeniach JavaScript. To podejście ma swoje własne pułapki, ponieważ polega tylko na JavaScript, aby zsyntetyzować zdarzenia myszy.
InternetExplorerOptions options = new InternetExplorerOptions();
options.EnableNativeEvents = false;
IWebDriver driver = new InternetExplorerDriver(options);
Wreszcie, można migrować z użyciem domyślnego SendMessage
Windows API do kodu, który używa więcej poprawnego SendInput
API. Odbywa się to za pomocą właściwości RequireWindowFocus
. Jego wadą jest to, że wejście myszy jest wstrzykiwane na bardzo niskim poziomie w systemie, co wymaga, aby okno IE było oknem pierwszego planu w systemie.
InternetExplorerOptions options = new InternetExplorerOptions();
options.RequireWindowFocus = true;
IWebDriver driver = new InternetExplorerDriver(options);
Na zakończenie nie należy ustawiać wszystkich tych właściwości naraz; wybierz podejście i trzymaj się go. Kilka z nich wzajemnie się wyklucza, a interakcja między nimi jest nieokreślona.
Którą wersję selenu używasz? – Karthikeyan
IE11 nadal cierpi na ten problem. Na szczęście poniższe rozwiązanie nadal działa, też :). –