【问题标题】:Protractor redirects and times out immediately after loading page加载页面后量角器立即重定向并超时
【发布时间】:2015-07-18 14:45:02
【问题描述】:

我正在尝试为 AngularJS 应用程序编写一些 e2e 规范。我在test/e2e/test_spec.js 中有一个 Jasmine 规格:

describe('basic functionality', function() {
  it('loads the home page', function() {
    browser.get('/');
    expect(browser.getCurrentUrl()).toMatch(/localhost/);
  });
});

运行规范时的终端输出:

> protractor protractor.config.js
Using the selenium server at http://localhost:4444/wd/hub
[launcher] Running 1 instances of WebDriver
basic functionality
  loads the home page - fail


Failures:

  1) basic functionality loads the home page
   Message:
     Error: waiting for page to load for 10000ms
Wait timed out after 10013ms
   Stacktrace:
     Error: waiting for page to load for 10000ms
Wait timed out after 10013ms
    at Array.forEach (native)
From: Task: waiting for page to load for 10000ms
    at [object Object].<anonymous> (/Users/jdent/swamp-bunny/test/e2e/test_spec.js:3:13)
From: Task: Asynchronous test function: it()
Error
    at [object Object].<anonymous> (/Users/jdent/swamp-bunny/test/e2e/test_spec.js:2:3)
    at Object.<anonymous> (/Users/jdent/swamp-bunny/test/e2e/test_spec.js:1:63)

Finished in 10.955 seconds
1 test, 1 assertion, 1 failure

[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1

当控制台位于[launcher] Running 1 instances of WebDriver 时,Chrome 会打开并显示索引页几分之一秒,然后更改为地址栏中带有data:text/html,&lt;html&gt;&lt;/html&gt; 的空白页。

这是我的protractor.config.js

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  capabilities: {
    'browserName': 'chrome'
  },
  specs: 'test/e2e/**/*_spec.js',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    isVerbose: true
  },
  allScriptsTimeout: 20000,
  onPrepare: function() {
    return browser.driver.get("http://localhost:8100");
  }
};

我的 webdriver-manager 东西似乎是最新的,尽管该工具似乎没有输出版本号的方法。

> webdriver-manager status
selenium standalone is up to date
chromedriver is up to date
IEDriver is not present

为什么规范失败了?

编辑:这是onPrepare被注释掉时打印到终端的内容:

> protractor protractor.config.js
Using the selenium server at http://localhost:4444/wd/hub
[launcher] Running 1 instances of WebDriver
A Jasmine spec timed out. Resetting the WebDriver Control Flow.
The last active task was:
unknown
basic functionality
  loads the home page - fail


Failures:

  1) basic functionality loads the home page
   Message:
     timeout: timed out after 30000 msec waiting for spec to complete
   Stacktrace:
     undefined

Finished in 34.27 seconds
1 test, 1 assertion, 1 failure

[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1

编辑 2: 当我执行 browser.get("http://google.com") 时,Chrome 会短暂显示 data:data:text/html,&lt;html&gt;&lt;/html&gt; 页面,重定向到 Google,然后超时寻找 Angular。

> protractor protractor.config.js
Using the selenium server at http://localhost:4444/wd/hub
[launcher] Running 1 instances of WebDriver
basic functionality
  loads the home page - fail


Failures:

  1) basic functionality loads the home page
   Message:
     Error: Angular could not be found on the page http://google.com/ : retries looking for angular exceeded
   Stacktrace:
     Error: Angular could not be found on the page http://google.com/ : retries looking for angular exceeded
    at Array.forEach (native)
From: Task: Asynchronous test function: it()
Error
    at [object Object].<anonymous> (/Users/jdent/swamp-bunny/test/e2e/test_spec.js:2:3)
    at Object.<anonymous> (/Users/jdent/swamp-bunny/test/e2e/test_spec.js:1:63)

Finished in 12.186 seconds
1 test, 1 assertion, 1 failure

[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1

【问题讨论】:

  • 如果您在配置中注释掉 onPrepare() 会怎样?
  • @alecxe 几乎相同的东西,除了浏览器在重定向到data:text/html,&lt;html&gt;&lt;/html&gt; 之前在一个带有data: url 的空白页面上启动。反复运行,它会在类似于问题中的错误和带有消息timeout: timed out after 30000 msec waiting for spec to complete 和堆栈跟踪undefined 的错误之间交替。
  • 感谢您试用 - stacktrace of undefined - 您也可以提供这种堆栈跟踪吗?
  • 你能不能也把browser.get("/");换成browser.get("https://google.com");这样的东西,看看你会得到什么输出?谢谢。
  • 更新了输出问题。当我执行browser.get("http://localhost:8100") 时,我的页面会加载并且测试通过。

标签: selenium protractor selenium-chromedriver angularjs-e2e


【解决方案1】:

在您的protractor.config.js 文件中设置baseUrl: 'http://localhost:8100'。来自Protractor Reference Config

您正在测试的应用程序的基本 URL。使用相对路径对 protractor.get() 的调用将带有此前缀。

【讨论】:

    【解决方案2】:

    这是量角器https://github.com/angular/protractor/issues/5103中的一个零星的开放错误

    不是这个

    browser.get('http://juliemr.github.io/protractor-demo/');
    

    使用它解决了我的问题。

    browser.driver.get('http://juliemr.github.io/protractor-demo/'); 
    

    【讨论】:

      【解决方案3】:

      我在 chrome 中遇到了这个问题。我在某处读到量角器从 data:text/html,&lt;html&gt;&lt;/html&gt; 页面开始。调用 browser.get(...) 会离开该页面。我的想法是在我的基本网址上打开 chrome。我通过将它添加到这样的功能中来实现这一点:

      capabilities: {
        'browserName': 'chrome',
        'chromeOptions': {
          'args': ['--app=www.yourBaseUrl.com']
        }
      },
      

      这有点小技巧,但似乎成功了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        • 2016-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多