top of page
90s theme grid background
Writer's pictureGunashree RS

WebdriverIO: Guide to Seamless Test Automation

Automation testing is pivotal for delivering high-quality software on tight schedules. As business applications are built on various platforms, it's crucial to streamline their testing. While Selenium has long been the go-to tool for web application testing, its combination with WebdriverIO has expanded its reach beyond just web applications, offering support for native mobile apps, especially on iOS.


In this guide, we’ll dive deep into WebdriverIO, covering everything from architecture and setup to writing and running tests. We’ll also look at how WebdriverIO stacks up against Selenium in key areas.



What is WebdriverIO?

WebdriverIO is an open-source JavaScript framework built to simplify automated testing. It runs on NodeJS and offers capabilities for testing both web applications and native iOS apps, making it a highly versatile tool. Whether you're into Behavior-Driven Development (BDD) or Test-Driven Development (TDD), WebdriverIO has you covered with support for both methodologies.


WebdriverIO’s straightforward structure allows testers to quickly write test scripts, making it a favorite among quality assurance (QA) professionals. Beyond just automating web browsers, it extends its utility to native iOS devices, thereby increasing the test coverage across multiple platforms.


WebdriverIO


WebdriverIO Architecture: How Does It Work?

At its core, WebdriverIO is based on NodeJS and implements the JSON Wire Protocol, which serves as the communication standard for browsers and mobile platforms.


Key Components of WebdriverIO Architecture:

  1. NodeJS: Handles communication between the user-written scripts and the browser or mobile app being tested.

  2. RESTful Architecture: Utilizes RESTful services for transmitting HTTP commands to the browser.

  3. JSON Wire Protocol: Acts as a middle layer, converting the RESTful requests into browser commands.


Workflow:

  • The tester writes a script in JavaScript using WebdriverIO.

  • WebdriverIO sends service requests via NodeJS to the browser or mobile app.

  • The browser executes the command and responds with the outcome of the operation.

This streamlined process ensures that tests run efficiently, allowing QAs to quickly identify and resolve bugs.



Why Use WebdriverIO for Automation Testing?

The primary reason for adopting WebdriverIO is its ability to test across multiple platforms, including web and iOS-native applications. This flexibility, combined with an easy-to-learn structure, makes it a compelling choice for both seasoned and novice testers.


Key Benefits of WebdriverIO:

  1. Platform Versatility: Unlike Selenium, which focuses primarily on web applications, WebdriverIO offers support for native mobile app testing on iOS devices.

  2. Third-Party Integrations: WebdriverIO supports seamless integration with third-party services such as BrowserStack, enabling features like real-device testing, cloud-based testing, and detailed test reports.

  3. Custom Commands: WebdriverIO allows testers to add custom commands via the addCommand() function, making it easy to extend functionality as needed.

  4. Improved Test Coverage: The combination of Selenium’s web automation prowess and WebdriverIO’s iOS capabilities gives testers a broad scope of application testing.


Example of Custom Command:

Here’s how you can use WebdriverIO to print a page’s URL:

javascript

browser.addCommand('getUrlAndTitle', function(customVar) {
  return {
    url: this.getUrl(),
    customVar: customVar
  }
})

Setting Up WebdriverIO

Before you start writing tests, you need to set up WebdriverIO. Below are the essential prerequisites and step-by-step setup instructions.


Prerequisites:

NodeJS & npm: Ensure that NodeJS and npm are installed. Check their versions using:bash

node -v
npm -v

Install WebdriverIO: Install WebdriverIO using npm:npm install webdriverio


Install Selenium Server:

bash

npm install -g selenium-standalone

Update Selenium and browser drivers:bashselenium-standalone install

selenium-standalone start


Creating Your First Project:

Create a project directory:

bash

mkdir WebdriverioTestProject
cd WebdriverioTestProject

Initialize the project:

bash

npm init -y

Install WebdriverIO CLI:

npm install @wdio/cli

Configuration:

Create a WebdriverIO configuration file to set up your environment:

bash

npx wdio config

During the setup, choose the framework (Mocha, Jasmine, or Cucumber), where to launch the tests, reporters, and whether to use synchronous or asynchronous commands.


Writing Your First Test Script

After setting up, the next step is writing your first test.


Test Case: Google Search Test

The goal here is to open Google.com, search for BrowserStack, and verify if the title of the resulting page contains the words "BrowserStack – Google Search".


Sample Code:

javascript

describe('Google Search Test', () => {
  it('should have the right title', async () => {
    await browser.url('https://google.com/');
    const searchBox = $('[name="q"]');
    await searchBox.setValue('BrowserStack\n');
    expect(browser).toHaveTitle('BrowserStack - Google Search');
  });
});

Running the Test Script

To execute the test script, run the following command:

bash

node ./test/specs/webdriverioTestScript.js

Upon execution, the browser opens, performs a Google search, and checks if the page title matches the expected output. Results will be printed in the console.



Best Practices for WebdriverIO Testing with Selenium Grid

  1. Use Logging: Utilize both text and visual logs for better traceability and debugging.

  2. Real Device Testing: Always run tests on real devices for accurate results. Services like BrowserStack provide easy integration with WebdriverIO.

  3. Efficient Debugging: Record test execution only when failures occur to minimize overhead and speed up the testing process.

  4. Custom Commands: Use WebdriverIO’s custom command feature to simplify repetitive tasks, enhancing code readability and maintenance.


WebdriverIO vs Selenium: Key Differences

Feature

WebdriverIO

Selenium

Programming Language

JavaScript

Java, Python, C#, Ruby, etc.

Application Support

Web + iOS Native

Web Only

Custom Commands

Allows custom command creation

No built-in support for custom commands

CI/CD Integrations

Jenkins, Docker, Bamboo

Jenkins, Azure, CircleCI, GitLab, etc.

Framework Support

Mocha, Jasmine, Cucumber

Mocha, Cucumber, Protractor, etc.


Conclusion

WebdriverIO is an advanced tool that extends the functionalities of traditional Selenium testing by enabling automation for both web and mobile platforms. Its ease of use, combined with custom command creation and support for mobile app testing, makes it a valuable asset in any tester’s toolkit. To fully harness its power, integrating it with cloud-based platforms like BrowserStack ensures comprehensive, real-device testing for superior results.



Key Takeaways:

  • WebdriverIO extends Selenium's capabilities by enabling testing on iOS devices.

  • Custom commands in WebdriverIO make it more flexible for testers.

  • Integrating with tools like BrowserStack enhances test efficiency and coverage.

  • WebdriverIO’s architecture is built on NodeJS, offering a lightweight, efficient framework.

  • Best practices include using real devices and recording only failed tests for debugging.




FAQs


1. What is WebdriverIO used for?

WebdriverIO is used for automating the testing of web applications and native iOS mobile apps.


2. Can WebdriverIO be used with Selenium Grid?

Yes, WebdriverIO can be integrated with Selenium Grid for parallel testing on multiple browsers and devices.


3. Is WebdriverIO better than Selenium?

While both have their merits, WebdriverIO is better suited for testing iOS applications and offers custom command support, while Selenium is more versatile for web testing across multiple languages.


4. How do I integrate WebdriverIO with BrowserStack?

You can integrate WebdriverIO with BrowserStack by updating the config file with the BrowserStack Hub URL and required credentials.



External Article Sources:


Comentarios


bottom of page