角度/量角器超时与多个表单域

时间:2014-07-22 01:56:43

标签: forms protractor

这是我对登录表单的第一个角度/量角器测试。运行测试时,它将一次测试一个表单字段没有问题,但是当添加第二个字段进行测试时,它总是超时。测试表单字段是否有秘密,我不知道?

'use strict';

describe('Login', function () {
  beforeEach(function () {
    // URL is relative to baseUrl specified in config/test/protractor-e2e.conf.js
    browser.get('');

    // browser.get('');
    // var account = browser.findElement(by.css('#sign-in-account'));
    // var username = browser.findElement(by.css('#sign-in-username'));
    // var password = browser.findElement(by.css('#sign-in-password'));
    // var submit = browser.findElement(by.css('.button-primary'));
    // submit.click();
  });

  it('should redirect user to first module they have access to after successful login',  function () {

    // Should successfully register a user
    element(by.name('account')).sendKeys('test');
    element(by.name('username')).sendKeys('test@testing.com');
    // element(by.name('password')).sendKeys('1234');
    // element(by.css('.button-primary')).click();

    // Should move to register page
    // expect(browser.getCurrentUrl()).toContain('silpada.kineticsupply.com/module/analytics');
    // Should show the first name where the lock icon was
    // expect(element(by.name('account')).getText()).toContain('test');
  }, 50000);
});

/*
 * config/test/protractor-e2e.conf.js
 *
 * Protractor end-to-end testing configuration
 */

exports.config = {
  // ----- How to setup Selenium -----
  //
  // There are three ways to specify how to use Selenium. Specify one of the
  // following:
  //
  // 1. seleniumServerJar - to start Selenium Standalone locally.
  // 2. seleniumAddress - to connect to a Selenium server which is already
  //    running.
  // 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs.

  // The location of the selenium standalone server .jar file.
  seleniumServerJar: null,
  // The port to start the selenium server on, or null if the server should
  // find its own unused port.
  seleniumPort: null,
  // Chromedriver location is used to help the selenium standalone server
  // find chromedriver. This will be passed to the selenium jar as
  // the system property webdriver.chrome.driver. If null, selenium will
  // attempt to find chromedriver using PATH.
  chromeDriver: null,
  // Additional command line options to pass to selenium. For example,
  // if you need to change the browser timeout, use
  // seleniumArgs: ['-browserTimeout=60'],
  seleniumArgs: [],

  // If sauceUser and sauceKey are specified, seleniumServerJar will be ignored.
  // The tests will be run remotely using SauceLabs.
  sauceUser: null,
  sauceKey: null,

  // The address of a running selenium server. If specified, Protractor will
  // connect to an already running instance of selenium. This usually looks like
  seleniumAddress: 'http://localhost:4444/wd/hub',


  // ----- What tests to run -----
  //
  // Spec patterns are relative to the location of this config.
  specs: [
    './e2e/**/login.js'
  ],

  // ----- Capabilities to be passed to the webdriver instance ----
  //
  // For a full list of available capabilities, see
  // https://code.google.com/p/selenium/wiki/DesiredCapabilities
  // and
  // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js
  capabilities: {
    'browserName': 'chrome'
  },

  // A base URL for your application under test. Calls to protractor.get()
  // with relative paths will be prepended with this.
  //baseUrl: 'http://localhost:8081',
  baseUrl: 'http://silpada.kineticsupply.com',

  allScriptsTimeout:30000,

  // Selector for the element housing the angular app - this defaults to
  // body, but is necessary if ng-app is on a descendant of <body>
  rootElement: 'body',

  // A callback function called once protractor is ready and available, and
  // before the specs are executed
  // You can specify a file containing code to run by setting onPrepare to
  // the filename string.
  onPrepare: function () {
    // At this point, global 'protractor' object will be set up, and jasmine
    // will be available. For example, you can add a Jasmine reporter with:
    //     jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(
    //         'outputdir/', true, true));
  },

  // ----- Options to be passed to minijasminenode -----
  jasmineNodeOpts: {
    // onComplete will be called just before the driver quits.
    onComplete: null,
    // If true, display spec names.
    isVerbose: true,
    // If true, print colors to the terminal.
    showColors: true,
    // If true, include stack traces in failures.
    includeStackTrace: true,
    // Default time to wait in ms before a test fails.
    defaultTimeoutInterval: 30000
  }
};

<div id="sign-in-container">
<div id="sign-in">
    <div class="logoContainer">
            <!-- <img src="/assets/img/silpada_logo.png" style="display:block;padding:2rem 0;margin:auto;" alt=""> -->
            <img ng-src="{{clientLogo}}" style="display:block;padding:2rem 0;margin:auto;" alt="">
    </div>
        <div ng-hide="catchResponses" alerts></div>
        <form id="sign-in-form" name="authForm" ng-submit="login(credentials)">

        <input
            id="sign-in-account"
            name="account"
            type="text"
            placeholder="Account ID"
            ng-model="credentials.account"
            required />

        <input
            id="sign-in-username"
            name="username"
            type="text"
            placeholder="Username"
            ng-model="credentials.username"
            required />

        <input
            id="sign-in-password"
            name="password"
            type="password"
            placeholder="Password"
            ng-model="credentials.password"
            required />

        <button ng-disabled="authForm.$invalid || authenticating()" class="button-primary" type="submit">Login <i style="float:right; font-size:1.5rem;" class="fa fa-cog fa-spin" ng-show="authenticating()"></i></button>
        <div id="reset-password"><a href="" ng-click="modal()">Forgot password?</a></div>
    </form>
</div>

1 个答案:

答案 0 :(得分:0)

这是我的工作脚本,只需添加ptor.ignoreSynchronization = true;

describe('Login', function () { 
    ptor = protractor.getInstance();
    ptor.ignoreSynchronization = true;

beforeEach(function () {  
    // URL is relative to baseUrl specified in config/test/protractor-e2e.conf.js
    ptor.get('/');   
});

it('should redirect user to first module they have access to after successful login',  function () {
    // Should successfully register a user
    ptor.findElement(protractor.By.name('account')).sendKeys('test');
    ptor.findElement(protractor.By.name('username')).sendKeys('test@testing.com');
    ptor.findElement(protractor.By.name('password')).sendKeys('1234');
    ptor.findElement(protractor.By.css('.button-primary')).click();

    // Should move to register page
    expect(browser.getCurrentUrl()).toContain('silpada.kineticsupply.com/module/analytics');

    // Should show the first name where the lock icon was
    expect(element(by.name('account')).getText()).toContain('test');
    });
});

我的跑步结果

Using the selenium server at http://localhost:4444/wd/hub

Login
    should redirect user to first module they have access to after successful lo
gin

Failures:

1) Login should redirect user to first module they have access to after succes
sful login
   Message:
     Expected 'http://silpada.kineticsupply.com/login' to contain 'silpada.kinet
icsupply.com/module/analytics'.
   Stacktrace:
     Error: Failed expectation

2) Login should redirect user to first module they have access to after succes
sful login
   Message:
     Expected '' to contain 'test'.

   Stacktrace:
     Error: Failed expectation

Finished in 12.697 seconds
1 test, 2 assertions, 2 failures