量角器不会等待页面加载,然后在firefox中移动到下一个块

时间:2016-06-22 04:50:01

标签: javascript selenium firefox selenium-webdriver protractor

我在使用量角器以及 firefox 时遇到问题。

在我的测试中,我首先将浏览器定向到登录页面,输入用户名和密码后,我会执行另一个 browser.get 操作,将我引导到另一个页面。

登录页面和第二页都是非角度页面。 我面临的问题是firefox不会等待初始页面加载并立即尝试执行重定向操作。

我试过firefox版本:27.0.1,28.0,42.0,45.0.1和46.0.1(所有32位版本)所有版本显示相同的行为。 webdriver-manager版本为10.0.4,selenium webdriver版本为2.53,os win8.1为64位,量角器版本为3.1.1。

当在chrome浏览器上运行相同的测试时,测试运行应该是,它等待登录完成,然后它转到执行browser.get操作的下一个块。

我的配置文件:

    var HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter');
    var path = require('path');

    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
      },
      params: {
        test: 'Regression',
        resources: 3,
        locations: 4,
        skills: 2,
        services: 0,
        useNameSpace: 0
      },
      capabilities: {
        'browserName': 'firefox'
      },
      onPrepare: function(){
    var dest = path.normalize('./Results');
    browser.manage().timeouts().setScriptTimeout(120000);
    jasmine.getEnv().addReporter(
        new HtmlScreenshotReporter({
            dest: dest,
            filename: 'my-report.html',
            showQuickLinks: true,
            reportOnlyFailedSpecs: false,
            captureOnlyFailedSpecs: true,
            restartBrowserBetweenTests: true
        })
    );

     global.isAngularSite = function(flag){
        browser.ignoreSynchronization = !flag;
     };
     browser.driver.manage().window().maximize();
    }
  };

我的代码文件:

describe('test', function () {

beforeEach(function(){
    isAngularSite(false);
}, 60000);

it('it1', function () {
    browser.get('https://example.com/');
    element(By.id('username')).clear();
    element(By.id('username')).sendKeys('sanu@field.com');
    element(By.id('password')).clear();
    element(By.id('password')).sendKeys('1234.org'); 
    element(By.id('Login')).click();
});

it('it2', function () {
    browser.get('https://example.com/SecondPage');
    browser.get('https://example.com/SecondPage');

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

任何建议?

1 个答案:

答案 0 :(得分:1)

由于这些不是角度页面,并且您正在关闭同步,因此在执行下一个操作之前,您必须告诉webdriver如何在单击登录按钮后等待某些事情发生。

在此示例中,您可以等待登录按钮不再存在,以便您知道它已准备好导航到下一页。

element(By.id('Login')).click();
browser.wait(function() {
    element(By.id('Login')).isDisplayed().then(function(loginButtonIsDisplayed) {
        // break out of the loop by returning 'true' when the login button is not displayed
        return !loginButtonIsDisplayed; 
), browser.getPageTimeout, 'after clicking the login button, the next page did not load within ' + browser.getPageTimeout + 's'};
browser.get('https://example.com/SecondPage');

browser.getPageTimeout是一个量角器超时,默认设置为10秒