How to Integrate Cucumber with Appium for Android App

 


To Integrate cucumber with appium, few steps are required to implement, which are mentioned below:



1. Install Prerequisites

Ensure the following tools are installed:



ToolPurpose
Java JDK (11+)Required for Java development
MavenBuild automation and dependency
Android StudioEmulator and SDK manager
Appium DesktopStart Appium server & inspect app
Node.jsRequired for Appium
Appium Java ClientJava bindings for Appium
Eclipse/IntelliJIDE for coding





Create Maven project and add dependencies:


<project>
  <dependencies>
    <!-- Cucumber -->
    <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-java</artifactId>
      <version>7.14.0</version>
    </dependency>
    <dependency>
      <groupId>io.cucumber</groupId>
      <artifactId>cucumber-junit</artifactId>
      <version>7.14.0</version>
      <scope>test</scope>
    </dependency>
    <!-- JUnit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
    </dependency>
    <!-- Appium -->
    <dependency>
      <groupId>io.appium</groupId>
      <artifactId>java-client</artifactId>
      <version>8.3.0</version>
    </dependency>
    <!-- Selenium -->
    <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
      <version>4.11.0</version>
    </dependency>
  </dependencies>
</project>





Create Feature File

src/test/resources/features/login.feature


Feature: Login functionality

  Scenario: Valid login
    Given App is launched
    When I enter username "testuser"
    And I enter password "1234"
    And I tap on login button
    Then I should see home screen





Create Step Definitions

src/test/java/stepDefinitions/LoginSteps.java



package stepDefinitions;

import io.appium.java_client.android.AndroidDriver;
import io.cucumber.java.en.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;

public class LoginSteps {
    public static AndroidDriver driver;

    @Given("App is launched")
    public void app_is_launched() throws Exception {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("platformName", "Android");
        caps.setCapability("deviceName", "emulator-5554");
        caps.setCapability("app", System.getProperty("user.dir") + "/apps/app-debug.apk");
        caps.setCapability("automationName", "UiAutomator2");

        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps);
    }

    @When("I enter username {string}")
    public void i_enter_username(String username) {
        driver.findElementById("com.example:id/username").sendKeys(username);
    }

    @When("I enter password {string}")
    public void i_enter_password(String password) {
        driver.findElementById("com.example:id/password").sendKeys(password);
    }

    @When("I tap on login button")
    public void i_tap_on_login_button() {
        driver.findElementById("com.example:id/login").click();
    }

    @Then("I should see home screen")
    public void i_should_see_home_screen() {
        boolean displayed = driver.findElementById("com.example:id/home").isDisplayed();
        assert displayed;
        driver.quit();
    }
}





Create Test Runner

src/test/java/runners/TestRunner.java

package runners;

import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)
@CucumberOptions(
  features = "src/test/resources/features",
  glue = {"stepDefinitions"},
  plugin = {"pretty", "html:target/cucumber-reports"},
  monochrome = true
)
public class TestRunner {
}





Run Appium Server

appium




Run Tests

mvn test