Emulators vs real devices in Testing Fundamentals - Automation Approaches Compared
from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class LoginPage: def __init__(self, driver): self.driver = driver self.username_field = (AppiumBy.ACCESSIBILITY_ID, "username_input") self.password_field = (AppiumBy.ACCESSIBILITY_ID, "password_input") self.login_button = (AppiumBy.ACCESSIBILITY_ID, "login_button") def enter_username(self, username): WebDriverWait(self.driver, 10).until( EC.visibility_of_element_located(self.username_field) ).send_keys(username) def enter_password(self, password): WebDriverWait(self.driver, 10).until( EC.visibility_of_element_located(self.password_field) ).send_keys(password) def tap_login(self): WebDriverWait(self.driver, 10).until( EC.element_to_be_clickable(self.login_button) ).click() class HomePage: def __init__(self, driver): self.driver = driver self.home_screen_element = (AppiumBy.ACCESSIBILITY_ID, "home_screen") def is_displayed(self): return WebDriverWait(self.driver, 10).until( EC.visibility_of_element_located(self.home_screen_element) ) is not None def create_driver(device_name, platform_version, app_path): desired_caps = { "platformName": "Android", "deviceName": device_name, "platformVersion": platform_version, "app": app_path, "automationName": "UiAutomator2" } return webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) def test_login_on_device(device_name, platform_version, app_path): driver = create_driver(device_name, platform_version, app_path) login_page = LoginPage(driver) home_page = HomePage(driver) login_page.enter_username("testuser") login_page.enter_password("Test@1234") login_page.tap_login() assert home_page.is_displayed(), f"Home screen not displayed on {device_name}" driver.quit() if __name__ == "__main__": # Test on emulator test_login_on_device("emulator-5554", "13.0", "/path/to/app.apk") # Test on real device test_login_on_device("real_device_01", "12.0", "/path/to/app.apk")
This script uses Appium with Python to automate the login test on both emulator and real device.
We define LoginPage and HomePage classes to separate page elements and actions, following the Page Object Model.
The create_driver function sets up the driver with device-specific capabilities, so we can reuse it for emulator and real device by passing different parameters.
Explicit waits ensure the script waits for elements to be visible or clickable before interacting, avoiding timing issues.
The test_login_on_device function performs the login steps and asserts the home screen is visible, confirming successful login.
Finally, the script runs tests on both emulator and real device by calling test_login_on_device with appropriate device names and platform versions.
Now add data-driven testing with 3 different username and password combinations.