2015-02-26 4 views
0

В течение последних двух дней я боролся с IEDriverServer.exe и любой версией IE. Я сузил его до любых команд .Click(), которые я делаю. Когда я использую один, тест только кажется дотянуть до него ошибки с сообщением, как это:Webdriver Internet Explorer .Click() timeout

"The HTTP request to the remote WebDriver server for URL http://localhost:2833/session/0cc60081-2142-427a-91b2-4563da3c3725/element/2c8403f6-7b06-4397-b2be-997a63ac3de1/click timed out after 60 seconds." 

Также в этом элементе я попытался щелкнуть полностью свинья все внимания делая нажав на что-нибудь еще (даже вручную) сложно. Если я вручную надвигаюсь на другой элемент, он будет мерцать между зависающим элементом и щелчком элемента. Затем я включил некоторое протоколирование и после того, как событие щелчка, я вижу следующее:

T 2015-02-26 13:29:25:407 Browser.cpp(419) Entering Browser::Wait 
D 2015-02-26 13:29:25:407 Browser.cpp(423) Navigate Events Completed. 
T 2015-02-26 13:29:25:407 Browser.cpp(648) Entering Browser::GetActiveDialogWindowHandle 
T 2015-02-26 13:29:25:407 Browser.cpp(192) Entering Browser::GetWindowHandle 
D 2015-02-26 13:29:25:408 Browser.cpp(439) Browser busy property is true. 
T 2015-02-26 13:29:25:408 IECommandExecutor.cpp(387) Entering IECommandExecutor::WaitThreadProc 
T 2015-02-26 13:29:25:608 IECommandExecutor.cpp(207) Entering IECommandExecutor::OnWait 
T 2015-02-26 13:29:25:608 IECommandExecutor.cpp(580) Entering IECommandExecutor::GetCurrentBrowser 
T 2015-02-26 13:29:25:608 IECommandExecutor.cpp(586) Entering IECommandExecutor::GetManagedBrowser 

снова повторил более.

После некоторого чтения я пробовал несколько вещей. Вместо того, чтобы использовать .Click(), я изменил его, чтобы использовать .SendKeys("\n"). Это помогает пройти тест, но, похоже, очень взломанное решение и не моделирует конечного пользователя так, как хотелось бы. Затем я запустил браузер с опцией EnableNativeEvents = false. Это остановило проблему фокуса фокуса, но .Click() по-прежнему не будет работать, и ни один из них не будет .SendKeys("\n"), оба получаются в том же журнале, что и раньше. Схватившись за соломинку, я также попытался игнорировать уровень масштабирования с помощью IgnoreZoomLevel = true.

Является ли мой единственный вариант использования .SendKeys("\n")?

ответ

1

Я столкнулся с такой же проблемой и в итоге оказался взломанным, который сначала пытается щелкнуть нормально, а затем использует .SendKeys("\n") как резерв. Похоже, что это (немного упрощенно):

public static void ClickWithIeHackFailover(this IWebElement element) 
{ 
    try 
    { 
     element.Click(); 
    } 
    catch (WebDriverException e) 
    { 
     if (e.Message != "Timed out waiting for page to load.") 
     { 
      element.SendKeys("\n"); 
     } 
    } 
} 

Это позволяет мне попробовать стандартный щелчок первый, а затем использовать SendKeys("\n") как неисправность более.

Для того, чтобы получить его работу во всех случаях, что мне нужно, чтобы установить время ожидания загрузки страницы, как это при создании драйвера:

driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5)); 

Это решает государства, где браузер не будет возвращать исполнение в Selenium, так как страница занята, что может быть вашим делом, так как у вас есть Browser busy property is true. в вашем журнале.

У меня было это так открыто, когда я придумал взломать: Why can't Selenium WebDriver find my element in a catch clause. Это может дать вам больше информации.