Git Product home page Git Product logo

astrolabe's Introduction

Astrolabe Build Status

Astrolabe is an extension for protractor that adds page objects to your functional/e2e tests.

Installation

via npm (node package manager)

$ npm install astrolabe

Usage

Example signInPage.js

var Page = require('astrolabe').Page;

module.exports = Page.create({

    url: { value: 'http://mysite.com/signin' },

    username: { get: function() { return this.findElement(this.by.input('username')); } }, // finds an input element with the name 'username'
    submit:   { get: function() { return this.findElement(this.by.id('submit')); } }       // finds an element with the id 'submit'
});

adding to tests:

var signInPage = require('./path/to/signInPage');

...

navigating:

signInPage.go(); // will send browser to 'http://mysite.com/signin'

signInPage.go('some', 'path'); // will send browser to 'http://mysite.com/signin/some/path'
signInPage.go('some/path');    // will send browser to 'http://mysite.com/signin/some/path'

signInPage.go({ some: 'query' }); // will send browser to 'http://mysite.com/signin?some=query'

interacting: (See Protractor API Docs for more info on available api methods)

signInPage.username.sendKeys('a username'); // will fill the username input with the text 'a username'

signInPage.submit.click(); // will click on the submit element
signInPage.username.getAttribute('value'); // will return a promise that is resolved with the value of the text field, in this case 'a username'

// this can be used within an expectation
expect(signInPage.username.getAttribute('value')).toBe('a username');

It is possible to create convenience methods to wrap up common logic.

Example signInPage.js

var Page = require('astrolabe').Page;

module.exports = Page.create({

    url: { value: 'http://mysite.com/signin' },

    username: { get: function() { return this.findElement(this.by.input('username')); } },
    password: { get: function() { return this.findElement(this.by.input('password')); } },
    submit:   { get: function() { return this.findElement(this.by.id('submit')); } },
    invalid:  { get: function() { return this.findElement(this.by.id('incorrectLogin')); } },

    InvalidLoginException: { get: function() { return this.exception('Invalid Login'); } },

    // Adds a signIn method to the page object.
    signIn:   { value: function(username, password) {

        var page = this;

        page.go();

        page.username.sendKeys(username);
        page.password.sendKeys(password);

        page.submit.click();

        return this.invalid.isDisplayed().then(function (wrongLogin) {
            if (wrongLogin) {
                page.InvalidLoginException.thro(username + ', ' + password + ' is not valid');
            }
        });
    } }
});

can be used in your tests:

var signInPage = require('./path/to/signInPage');

...

signInPage.signIn('test user', 'testpassword'); // will navigate to sign in page, enter username and password then click submit.

...

Cloning and running Astrolabe's tests

Clone the github repository.

git clone https://github.com/stuplum/astrolabe.git
cd astrolabe
npm install

npm test

Running Astrolabe's example protractor test

Install protractor with.

npm install protractor

Start up a selenium server (See the appendix below for help with this). By default, the tests expect the selenium server to be running at http://localhost:4444/wd/hub.

The example folder contains a simple test suite which runs against angularjs.org. It is a port of the simple test suite included with protractor.

Currently only the protractor runner is supported. The runner accepts a configuration file, which runs the tests at example/onProtractorRunner.js.

node_modules/.bin/protractor examples/protractor.conf.js

Setting up a standalone selenium server

See Appendix A of protractor's installation instructions

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.