You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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应用的唯一标识):

  1. 获取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。

  2. 完整的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文件,避免硬编码:

  1. 创建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"
  1. 在脚本中读取配置:
import yaml

with open("config.yaml", "r") as f:
    ENV_CONFIGS = yaml.safe_load(f)

五、运行测试步骤

  1. 启动Appium Server:
    命令行执行:appium(确保Appium已安装)
  2. 连接Android设备/模拟器:
    确保设备已通过adb连接:adb devices能看到设备
  3. 运行测试:
    • 指定环境运行所有测试: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:24:29