Sign inSign up

you54f/webdriverio

By you54f

•Updated over 7 years ago

Image
0

128

you54f/webdriverio repository overview

⁠Tech Stack
  • WebdriverIO⁠ - It is the selenium webdriver api bindings for node.js, It has a very simple api which could be used to automate web & browser apps in a fast and scalable way.
  • Typescript(Javascript)⁠ - It is the superset of javascript which has additional static typings and features like JAVA and other languaes. Now you could write your code which compiles to pure javascript.
  • Cucumber⁠ - The popular BDD test framework which helps us write automated tests.

⁠Getting Started

⁠Pre-requisites
  1. Docker

⁠Installation

⁠Setup Scripts
  • Clone the repository into a folder
  • Optional - build docker image locally
  • Install dependencies with docker-compose run --rm webdriverio npm install

You can build the docker image locally

docker build Dockerfile/. -t wdiodocker or npm run dockerbuild

Don't forget to update your docker-compose.yml to use the local docker image

⁠Compiling tests
  • Run docker-compose to connect to the container and compile the typeScript src files

docker-compose run --rm webdriverio npm run build

⁠Running Tests
⁠Saucelabs

To execute across Saucelabs, set the SAUCE_USERNAME and SAUCE_ACCESSKEY environment variables.

Note that you aren't required to create a Sauce Connect tunnel, this will be handled automatically.

Run docker-compose run --rm webdriverio npm run test-sauce

⁠BrowserStack

To execute across BrowserStack, set the BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESSKEY environment variables.

Run docker-compose run --rm webdriverio npm run test-browserstack

⁠TestingBot

To execute across TestingBot, set the TESTINGBOT_USERNAME and TESTINGBOT_ACCESSKEY environment variables.

Run docker-compose run --rm webdriverio npm run test-testingbot

⁠Selenium in Locally Hosted Docker Container

Run docker-compose run --rm webdriverio npm run test-local

⁠Configuration

tsconfig.json defines the outDir where Typescript will transpile to. This directory is deleted by the npm run clean or npm run clean-build commands.

conf/local.conf.js and conf/saucelabs.conf.js define the configuration of webdriverio.

  • specs: [...] defines matchers for the cucumber feature files to run as default.
  • suites: {...} defines named matcher sets for different suite types (e.g. smoke, login, etc.)
  • services and capabilities define the nature of the selenium execution. Most commonly support local (standalone) execution or Saucelabs.
  • baseUrl: defines the default/base URL to use for the tests. This is most commonly the landing URL for the desired environment & app.
  • require: [...] defines the matchers for the step definitions to use in the run.

For more information on configuration, see http://webdriver.io/guide/testrunner/configurationfile.html⁠

⁠Writing Tests

Cucumber framework has been integrated with this project, WebdriverIO's wdio-cucumber-framework adapter helps write BDD style tests with Features & Step Definitions.

import { expect } from 'chai';
import { Given, Then, When } from 'cucumber';
import { LoginPage } from '../pages/login.page';

Given(
    /^I attempt to log in with valid details/,
    () => {
        LoginPage.openLogin();
        LoginPage.login('tomsmith', 'SuperSecretPassword!');
    });

Then(
    /^I am presented with the (success|error) message$/,
    (message: string) => {
        const successMessage: string = 'You logged into a secure area!';
        const errorMessage: string = 'Your username is invalid!';
        if (message === 'success') {
            expect(LoginPage.getConfirmationText(message)).to.contain(successMessage);
        } else if (message === 'error') {
            expect(LoginPage.getConfirmationText(message)).to.contain(errorMessage);
        }
    });

⁠Page Objects

This framework is strictly written using page-object design pattern.

class LoginPageObject {

  private _url: string = '/login';
  private _username: string = '#username';
  private _password: string = '#password';
  private _submit: string = 'button[type="submit"]';

  public get loginButton() { return browser.element(this._submit); }
  public get username() { return browser.element(this._username); }
  public get password() { return browser.element(this._password); }

  public openLogin(): void {
    browser.url(this._url);
  }

  public login(username: string, password: string): void {
    this.username.setValue(username);
    this.password.setValue(password);
    this.loginButton.click();
  }

export const LoginPage = new LoginPageObject();
⁠Intellisense

Typings have been added for WebDriverIO / Cucumber / Chai / Node from the DefinitelyTyped⁠ project.

Add these to your IDE for a much more pleasant development experience

Tag summary

Content type

Image

Digest

Size

81.4 MB

Last updated

over 7 years ago

docker pull you54f/webdriverio