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&connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAAUwalDb1qVUqsBmCLuURNHwAAAAACAAAAAAADZgAAwAAAABAAAADr9g2GQVKvK1pb%2FivxTu%2BBAAAAAASAAACgAAAAEAAAAB5eAALolT7EtoL1Y9C1xPooAAAA3TnUmbajNM9RIJ8oDRsPGLjavLcB2M10CyoJMXrnpv9H9XzB4bRVLBQAAABrEcirF0pjR5t%2Fst0mWJ0MnJYVlA%3D%3D&messageId=d-9774B3D8-B%2C24%7CC%2C0%7CD%2C0%7CE%2C0&connectionData=%5B%7B%22name%22%3A%22devicehub%22%7D%5D&tid=8&callback=jQuery21103819021041958953_1481549049341&_=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
我正在使用 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&connectionToken=AQAAANCMnd8BFdERjHoAwE%2FCl%2BsBAAAAUwalDb1qVUqsBmCLuURNHwAAAAACAAAAAAADZgAAwAAAABAAAADr9g2GQVKvK1pb%2FivxTu%2BBAAAAAASAAACgAAAAEAAAAB5eAALolT7EtoL1Y9C1xPooAAAA3TnUmbajNM9RIJ8oDRsPGLjavLcB2M10CyoJMXrnpv9H9XzB4bRVLBQAAABrEcirF0pjR5t%2Fst0mWJ0MnJYVlA%3D%3D&messageId=d-9774B3D8-B%2C24%7CC%2C0%7CD%2C0%7CE%2C0&connectionData=%5B%7B%22name%22%3A%22devicehub%22%7D%5D&tid=8&callback=jQuery21103819021041958953_1481549049341&_=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