C# 量角器 AngularJS IEDriverServer Click() 异常 "Timed out waiting for page to load"

C# Protractor AngularJS IEDriverServer Click() Exception "Timed out waiting for page to load"

我正在使用 Protractor 来测试我们的 AngularJS 应用程序(使用 Chrome 和 IE 驱动程序)。 IEDriverServer 在大多数页面上工作正常,除了这个页面,几乎所有的 Click() 事件都会导致异常 "Timed out waiting for page to load."

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 设置多长时间并不重要。单击事件将 return 在指定的等待时间结束后发生异常。

在您的点击事件之间,如果页面正在刷新。然后请检查 conf.js 文件中的 browser.manage().timeouts().pageLoadTimeout(<timeout in milliseconds>)

在 C# 中,有以下方式的 pageLoadTimeout() 选项:

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

我认为你需要寻找 pageLoadTimeout(),因为量角器内部只会等待指定的时间来加载页面。之后它会抛出等待页面加载的超时。

我遇到过这个问题,我找到的唯一解决方案是让 SignalR 与 WebSockets 一起工作,这需要 IIS8。在我的例子中,SignalR 与长轮询一起工作,它使连接保持打开状态很长时间。即使您增加超时,这也会使您的测试慢得令人无法接受。参见:SignalR w/ Web Sockets