【问题标题】:C# Protractor AngularJS IEDriverServer Click() Exception "Timed out waiting for page to load"C# Protractor AngularJS IEDriverServer Click() 异常“等待页面加载超时”
【发布时间】:2017-04-25 11:19:24
【问题描述】:

我正在使用 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。我在它的 head 部分中找到了此代码,而其他页面中没有。这可能是超时异常的原因吗?我该怎么做才能使其正常工作?

<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 设置多长时间并不重要。在指定的等待时间过后,点击事件将返回异常。

【问题讨论】:

  • 考虑过增加超时时间吗?
  • 是的。并且在指定时间过后仍然会超时。

标签: javascript c# angularjs signalr selenium-iedriver


【解决方案1】:

我遇到了这个问题,我找到的唯一解决方案是让 SignalR 与需要 IIS8 的 WebSockets 一起工作。就我而言,SignalR 正在使用长轮询,它可以长时间保持连接打开。即使您增加超时,这也会使您的测试速度慢得无法接受。见:SignalR w/ Web Sockets

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 对不起,这是一个愚蠢的问题,但是 conf.js 文件在哪里?它是应用程序的一部分还是我的测试代码库的一部分?
    • 在C#中,你一定用过seleniumDriver.manage().timeouts() .pageLoadTimeout(50, TimeUnit.SECONDS) .implicitlyWait(20, TimeUnit.SECONDS) .setScriptTimeout(10, TimeUnit.SECONDS );
    • 不管我设置的等待时间有多长,我都会在指定的等待时间过去后出现超时异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2022-12-15
    相关资源
    最近更新 更多