如何用Appium+Selenium+Python+pytest启动Chrome及Android应用(如Facebook)
Android Chrome与原生应用自动化测试实现指南(Appium+Python+pytest)
需求概述
实现以下两类Android自动化场景:
- Chrome浏览器自动化操作(打开移动端Facebook网页)
- Facebook原生应用启动与自动化操作
同时需要为不同环境(DEV/PRD)配置参数,并基于pytest框架完成脚本编写与运行。
一、已实现的Chrome浏览器Desired Capabilities
chrome_caps = { 'platformName': 'Android', 'platformVersion': '9.0', 'deviceName': 'Android Emulator', 'automationName': 'UIAutomator2', 'browserName': 'Chrome' }
二、Facebook原生应用的Desired Capabilities配置
要启动原生应用,需替换browserName为appPackage和appActivity(这两个参数是Android应用的唯一标识):
获取Facebook的appPackage和appActivity:
打开设备上的Facebook应用,执行adb命令:adb shell dumpsys window | grep mCurrentFocus输出示例:
com.facebook.katana/com.facebook.katana.LoginActivity,其中com.facebook.katana是appPackage,com.facebook.katana.LoginActivity是appActivity。完整的Facebook应用Capabilities配置:
facebook_caps = { 'platformName': 'Android', 'platformVersion': '9.0', 'deviceName': 'Android Emulator', 'automationName': 'UIAutomator2', 'appPackage': 'com.facebook.katana', 'appActivity': 'com.facebook.katana.LoginActivity', # 可选:如果应用未安装,指定app路径;已安装则无需 # 'app': '/path/to/facebook.apk' }
三、完善测试脚本
首先需要定义driver_mobile fixture,根据测试场景初始化对应的Appium Driver:
import pytest from appium import webdriver from selenium.webdriver.common.by import By from your_env_module import ENV # 替换为你的ENV模块路径 # 定义环境配置(也可抽离到单独配置文件) ENV_CONFIGS = { ENV.DEV: { "chrome": { "username": "test@facebook.com", "password": "Password", "url": "https://m.facebook.com/" }, "facebook": { "username": "test1@facebook.com", "password": "Password" } }, ENV.PRD: { "chrome": { "username": "test@facebook.com", "password": "Password", "url": "https://m.facebook.com/" }, "facebook": { "username": "test1@facebook.com", "password": "Password" } } } @pytest.fixture(scope="session") def test_args(request): # 通过命令行参数获取环境,例如:pytest --env=DEV env = request.config.getoption("--env") return {"env": getattr(ENV, env)} @pytest.fixture(scope="function") def driver_mobile(request, test_args): # 根据测试函数名称判断启动场景 driver = None test_name = request.function.__name__ if "chrome" in test_name: caps = { 'platformName': 'Android', 'platformVersion': '9.0', 'deviceName': 'Android Emulator', 'automationName': 'UIAutomator2', 'browserName': 'Chrome' } driver = webdriver.Remote('http://localhost:4723/wd/hub', caps) elif "facebook" in test_name: caps = { 'platformName': 'Android', 'platformVersion': '9.0', 'deviceName': 'Android Emulator', 'automationName': 'UIAutomator2', 'appPackage': 'com.facebook.katana', 'appActivity': 'com.facebook.katana.LoginActivity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', caps) yield driver # 测试结束后关闭driver if driver: driver.quit() @pytest.fixture def launch_chrome(test_args): return ENV_CONFIGS[test_args["env"]]["chrome"] @pytest.fixture def launch_facebook(test_args): return ENV_CONFIGS[test_args["env"]]["facebook"] class TestLaunch(): def test_run_chrome(self, driver_mobile, launch_chrome): # Chrome浏览器自动化步骤:打开URL、登录 driver_mobile.get(launch_chrome["url"]) # 定位用户名输入框(示例,需根据实际页面调整元素定位) username_input = driver_mobile.find_element(By.ID, "m_login_email") username_input.send_keys(launch_chrome["username"]) # 定位密码输入框 password_input = driver_mobile.find_element(By.ID, "m_login_password") password_input.send_keys(launch_chrome["password"]) # 点击登录按钮 login_btn = driver_mobile.find_element(By.NAME, "login") login_btn.click() def test_run_facebook(self, driver_mobile, launch_facebook): # Facebook原生应用自动化步骤:登录 # 定位用户名输入框(示例,需根据实际应用元素调整) username_input = driver_mobile.find_element(By.ID, "com.facebook.katana:id/login_username") username_input.send_keys(launch_facebook["username"]) # 定位密码输入框 password_input = driver_mobile.find_element(By.ID, "com.facebook.katana:id/login_password") password_input.send_keys(launch_facebook["password"]) # 点击登录按钮 login_btn = driver_mobile.find_element(By.ID, "com.facebook.katana:id/login_button") login_btn.click()
四、配置文件管理
将环境配置抽离到单独的yaml/json文件,避免硬编码:
- 创建
config.yaml:
DEV: chrome: username: "test@facebook.com" password: "Password" url: "https://m.facebook.com/" facebook: username: "test1@facebook.com" password: "Password" PRD: chrome: username: "test@facebook.com" password: "Password" url: "https://m.facebook.com/" facebook: username: "test1@facebook.com" password: "Password"
- 在脚本中读取配置:
import yaml with open("config.yaml", "r") as f: ENV_CONFIGS = yaml.safe_load(f)
五、运行测试步骤
- 启动Appium Server:
命令行执行:appium(确保Appium已安装) - 连接Android设备/模拟器:
确保设备已通过adb连接:adb devices能看到设备 - 运行测试:
- 指定环境运行所有测试:
pytest --env=DEV - 单独运行Chrome测试:
pytest test_file.py::TestLaunch::test_run_chrome --env=DEV - 单独运行Facebook测试:
pytest test_file.py::TestLaunch::test_run_facebook --env=PRD
- 指定环境运行所有测试:
内容的提问来源于stack exchange,提问作者SeanRay
相关产品推荐
相关产品推荐

