Методы Selenium ChromeDriver блокируются после использования ExecuteAsyncScript (ожидание результата от JS)? - PullRequest
0 голосов
/ 05 ноября 2018

Испытывая драйвер Selenium, я чувствую, что это слишком глючно и действительно трудно контролировать. Я не уверен, что это также относится и к версии Java, но здесь я говорю о версии .NET (устанавливается с помощью nuget: Selenium.WebDriver).

Я имитирую случай, когда ExecuteAsyncScript будет некоторое время блокироваться, прежде чем вернуть какой-либо результат из JavaScript. Однако его вызов помещается в другой поток , который освобождает текущий поток пользовательского интерфейса от блокировки, например:

//this helps mimic the blocking situation better
_driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromDays(1);
Task.Run(() => {
                _driver.ExecuteAsyncScript("");
               });

После этого я не могу сделать много вещей (я не пробовал все, но выглядит как все) на экземпляре _driver (из ChromeDriver), на самом деле я хочу просто выключить / закрыть / утилизировать Водитель без его блокировки, как это:

_driver.Quit(); 

Однако это никогда не будет (и не может быть выполнено), вызов просто заблокирован навсегда. Если он находится в потоке пользовательского интерфейса, пользовательский интерфейс будет заблокирован, если он находится в выделенном потоке, ничего не происходит (но отладка показывает, что вызов всегда блокируется, и поток никогда не завершается). Поэтому я не могу уничтожить экземпляр _driver в этом сценарии.

Это так нелепо и редко (если не сказать никогда ) встречаться в любой стандартной / изначально разработанной библиотеке .NET, которую я использовал. Я знаю, что .NET-версия Selenium просто портирована из Java-версии, так что, похоже, что-то вроде качества Java-кода? (У меня было такое же чувство при работе с NPOI - другой портированной библиотекой Java-to- .NET, но она использовалась для работы с Excel, на самом деле она очень плохо спроектирована).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...