from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import unittest
class MobileLoginTest(unittest.TestCase):
def setUp(self):
desired_caps = {
'platformName': 'Android',
'platformVersion': '13',
'deviceName': 'Android Emulator',
'appPackage': 'com.example.mobileapp',
'appActivity': 'com.example.mobileapp.MainActivity',
'automationName': 'UiAutomator2'
}
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
self.wait = WebDriverWait(self.driver, 20)
def test_login(self):
# Wait for username field and enter username
username_field = self.wait.until(EC.element_to_be_clickable((By.ACCESSIBILITY_ID, 'username_input')))
username_field.send_keys('testuser')
# Wait for password field and enter password
password_field = self.wait.until(EC.element_to_be_clickable((By.ACCESSIBILITY_ID, 'password_input')))
password_field.send_keys('Test@1234')
# Wait for login button and tap
login_button = self.wait.until(EC.element_to_be_clickable((By.ACCESSIBILITY_ID, 'login_button')))
login_button.click()
# Wait for home screen element to verify login success
home_screen_element = self.wait.until(EC.presence_of_element_located((By.ACCESSIBILITY_ID, 'home_screen')))
self.assertTrue(home_screen_element.is_displayed(), 'Home screen is not displayed')
# Verify no error message is shown
error_elements = self.driver.find_elements(By.ACCESSIBILITY_ID, 'error_message')
self.assertEqual(len(error_elements), 0, 'Error message displayed after login')
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()This test script uses Appium with Python to automate the mobile app login test.
setUp() initializes the Appium driver with desired capabilities for an Android emulator.
In test_login(), explicit waits ensure elements are ready before interacting, which handles app loading delays.
We locate elements by accessibility IDs, which are stable and recommended for mobile testing.
Assertions check that the home screen appears and no error messages are shown, confirming successful login.
tearDown() closes the app session after the test.
This approach addresses mobile testing challenges like varying load times, different screen sizes, and UI stability.