使用browser.get会导致异步脚本超时

时间:2016-05-09 07:23:34

标签: angularjs selenium-webdriver protractor

我正在使用量角器进行自动化测试,我遇到了以下行为:

当我尝试使用browser.get加载一个certin页面时,页面已加载,但是我收到以下错误:

Error while running testForAngular: asynchronous script timeout: result was not received in 11 seconds.

我以下列方式使用browser.get:

beforeEach(function() {
     browser.ignoreSynchronization = false;
     browser.get('https://.../Automation_VF');
     browser.ignoreSynchronization = true;
},60000);

it(data.testProperties.Description, function () {

       browser.executeScript('return RemoteActions;')
       .then(function(remoteAction) {
                browser.executeAsyncScript(function(remoteAction) {
                var callback = arguments[arguments.length - 1];
                    Visualforce.remoting.Manager.invokeAction(remoteAction.clearAllData, function (res, ev) {
                        callback(res);
                    }, { buffer: false, escape: false, timeout: 15000 });
                },remoteAction).then(function(res) {
                    console.log("executing async script");
                    console.log(res);
                });
        });
});

我的conf文件是:

exports.config = {
  framework: 'jasmine2',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['multiTestRun.js'],
  getPageTimeout: 60000,
  rootElement: '[ng-app]',
  jasmineNodeOpts: {
      showColors: true,
      defaultTimeoutInterval: 10000000,
      isVerbose: true,
      includeStackTrace: true
  },
  ...
};

页面Automation_VF是非角度页面。 如果我在browser.ignoreSynchronization设置为true后尝试使用browser.get命令,则页面不会被丢失。

我的问题是为什么我会得到上面提到的错误(即使it块中的所有代码都被注释掉,也会发生错误)以及如何使browser.get命令使用里面的执行脚本命令它块?

2 个答案:

答案 0 :(得分:0)

我的第一个建议是使用页面对象并提取Automation_VF页面,然后该页面将处理页面本身的检索。这样你的对象知道如何让自己和你的规格知道如何禁用/启用同步。 This可能会让您感动。

答案 1 :(得分:0)

将it块转换为以下格式后,我能够解决问题:

it(data.testProperties.Description, function () {
       browser.get('https://.../Automation_VF');
       browser.get('https://.../Automation_VF');

       browser.executeScript('return RemoteActions;')
       .then(function(remoteAction) {
                browser.executeAsyncScript(function(remoteAction) {
                var callback = arguments[arguments.length - 1];
                    Visualforce.remoting.Manager.invokeAction(remoteAction.clearAllData, function (res, ev) {
                        callback(res);
                    }, { buffer: false, escape: false, timeout: 15000 });
                },remoteAction).then(function(res) {
                    console.log("executing async script");
                    console.log(res);
                });
        });
});

似乎当只有一个get动作时,请求的页面没有被加载,并且做了两个get动作修复了它。