To Integrate cucumber with appium, few steps are required to implement, which are mentioned below:
1. Install Prerequisites
Ensure the following tools are installed:
| Tool | Purpose |
|---|---|
| Java JDK (11+) | Required for Java development |
| Maven | Build automation and dependency |
| Android Studio | Emulator and SDK manager |
| Appium Desktop | Start Appium server & inspect app |
| Node.js | Required for Appium |
| Appium Java Client | Java bindings for Appium |
| Eclipse/IntelliJ | IDE 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
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
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