C# транспортир AngularJS IEDriverServer Click() Исключение "Превышено время ожидания загрузки страницы"

Я использую Protractor для тестирования нашего приложения AngularJS (с драйверами Chrome и IE). IEDriverServer работает нормально на большинстве страниц, за исключением этой одной страницы, где почти все событие Click() приведет к исключению "Превышено время ожидания загрузки страницы".

Параметры драйвера IE устанавливаются следующим образом:

var ieOptions = new InternetExplorerOptions
{
    BrowserCommandLineArguments = "-private",
    EnableNativeEvents = false,
    IgnoreZoomLevel = true,
    IntroduceInstabilityByIgnoringProtectedModeSettings = false
};

// No Proxy
var proxy = new Proxy()
{
    Kind = ProxyKind.Direct
};

ieOptions.Proxy = proxy;

Кроме того, IgnoreSynchronization = true.

Отредактировано 1: Я думаю, что разница между этой страницей и другими заключается в использовании Javascript SignalR. Я нахожу этот код в его главном разделе, которого нет на других страницах. Может ли это быть причиной исключений тайм-аута и что я могу сделать, чтобы это работало?

<script src="https://localhost:37121/signalr/poll?transport=longPolling&amp;connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAAUwalDb1qVUqsBmCLuURNHwAAAAACAAAAAAADZgAAwAAAABAAAADr9g2GQVKvK1pb%2FivxTu%2BBAAAAAASAAACgAAAAEAAAAB5eAALolT7EtoL1Y9C1xPooAAAA3TnUmbajNM9RIJ8oDRsPGLjavLcB2M10CyoJMXrnpv9H9XzB4bRVLBQAAABrEcirF0pjR5t%2Fst0mWJ0MnJYVlA%3D%3D&amp;messageId=d-9774B3D8-B%2C24%7CC%2C0%7CD%2C0%7CE%2C0&amp;connectionData=%5B%7B%22name%22%3A%22devicehub%22%7D%5D&amp;tid=8&amp;callback=jQuery21103819021041958953_1481549049341&amp;_=1481549049371" async=""></script>

Редактировать 2: не имеет значения, как долго я устанавливаю ImplicitWait, SetPageLoadTimeout и SetScriptTimeout. События щелчка будут возвращаться с исключением после истечения указанного времени ожидания.

2 ответа

Решение

У меня была эта проблема, и единственным решением, которое я нашел, было заставить SignalR работать с WebSockets, для чего требуется IIS8. В моем случае SignalR работал с Long Polling, который долгое время держал соединение открытым. Даже если вы увеличите время ожидания, это сделает ваши тесты неприемлемо медленными. Смотрите: SignalR с веб-сокетами

Между событиями клика, если страница обновляется. Тогда, пожалуйста, проверьте browser.manage().timeouts().pageLoadTimeout(<timeout in milliseconds>) в вашем файле conf.js.

В C# есть опция для pageLoadTimeout() следующим образом:

seleniumDriver.manage().timeouts()
      .pageLoadTimeout(xx, TimeUnit.SECONDS)
      .implicitlyWait(xx, TimeUnit.SECONDS)
      .setScriptTimeout(xx, TimeUnit.SECONDS);

Я думаю, что вам нужно искать pageLoadTimeout(), потому что транспортир внутри будет ждать только определенное время для загрузки страницы. После этого будет выброшено время ожидания загрузки страницы.

Другие вопросы по тегам