Mobile Test Automation: Appium + Selenide

Mobile Test Automation: Appium + Selenide

Noveo's Senior Test Engineer and Tech Lead Natalya shares a real project case study explaining why mobile automation deserves your attention and how to get started. 

Nearly 100% of manual testers want to learn automation (or so it seems!). But in practice, most focus exclusively on WEB or API testing (or both). Of course, we've all seen countless articles and courses like "Start Automation with Selenium" or "Learn Java Test Automation in 3 Weeks." Yet few consider automation for mobile testing - despite its growing importance, especially for native apps (not just adapted websites but full mobile experiences).

Why Consider Mobile Automation?

Today mobile apps aren't optional - they're core products across industries: banking, delivery services, ride-hailing, marketplaces, messaging platforms, etc. Over 60% of users prefer mobile apps to websites, making app quality critical. Compared to web platforms, manual mobile testing requires significantly more time and resources due to:

• Device and OS fragmentation

• The need to support both iOS and Android simultaneously (doubling effort)

This makes mobile test automation a logical next step.

From Theory to Practice: Unpacking a Real Case Study

At a recent QA meetup, we examined Appium - likely the most popular tool for cross-platform mobile automation. But not just Appium - its combination with Selenide, which came as a revelation to many. But why complicate things when you can use familiar, convenient tools?

Our project already had a powerful Selenide framework supporting WEB and API testing. Adding mobile support (for both iOS and Android) proved surprisingly straightforward. Instead of building a new framework from scratch, we integrated Appium into our existing architecture, preserving:

✅ Single entry point (selectable via parameters: WEB/API/Mobile iOS/Mobile Android)

✅ Shared PageObject structure (code reuse instead of duplication)

✅ Unified server request handling (no need to reimplement clients)

✅ All Selenide benefits: concise syntax, convenient assertions, stable waits, automatic screenshots, and more!

Code Examples

Here's a simple cross-platform PageObject for a mobile login screen:

public class LoginScreen{
  
   @AndroidFindBy(id = "emailInputId")
   @iOSXCUITFindBy(accessibility = "login_email_text_field")
   protected SelenideAppiumElement loginField;

   @AndroidFindBy(id = "passwordInputId")
   @iOSXCUITFindBy(accessibility = "login_password_text_field")
   protected SelenideAppiumElement passwordField;

   @AndroidFindBy(id = "loginButton")
   @iOSXCUITFindBy(accessibility = "login_button")
   protected SelenideAppiumElement loginButton;


   @Step("Fill in login field")
   public LoginScreen fillInLogin(String login) {
       loginField.setValue(login);

       return this;
   }

   @Step("Fill in password field")
   public LoginScreen fillInPassword(String password) {
       passwordField.setValue(password);

       return this;
   }

   @Step("Press login button")
   public LoginScreen clickLoginButton() {
       loginButton.click();
       return this;
   }

   @Step("Execute login")
   public LoginScreen login(User user) {
       fillInLogin(user.getEmail());
       fillInPassword(user.getPassword());
       clickLoginButton();

       return this;
   }

}

And a sample test:

public class LoginTest extends MobileSetUp {

   @BeforeMethod(groups = "mobile")
   public void openLogin() {
       welcomeScreen.openLogin();
   }

   @TestRailId(id = 7505)
   @Test(groups = "mobile")
   public void successLogin() {
 	 loginScreen.login(FLEET.ACTIVE_DRIVER);
       mapScreen.menuTabBarElements.checkTabbarIsShown();
   }

Test execution commands for Android:

mvn clean test -Ddevice=android -Dgroups=mobile

Test execution commands for iOS:

mvn clean test -Ddevice=ios -Dgroups=mobile

Not Without Surprises...

We also discussed non-obvious framework quirks we encountered (spoiler: every challenge has a solution):

  • Different behavior of the same Appium methods on iOS vs Android
  • Challenges with mobile cache interaction
  • Handling mobile permissions in automated tests
  • Keyboard and popup behavior nuances

Key Takeaways

If you're at a crossroads about whether and how to start automation:

  • Don't limit yourself to just WEB or API
  • Consider how critical mobile tests are for your product
  • If you already have a Selenide framework - maximize its potential

Remember: mobile test automation doesn't have to be complicated - especially when you have a community willing to share knowledge. If you have questions - we're always happy to help!