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

能否在同一Java程序中用Selenium与Appium实现安卓APP与网页通话自动化?

可以在同一Java程序中同时使用Selenium WebDriver和Appium AndroidDriver

当然可以,这两个Driver分属不同的自动化工具栈,只要配置正确就能在同一个Java项目中独立运行,完美实现你需要的安卓APP发起通话、网页端接听的跨端自动化流程。

环境准备

先确保本地环境满足以下要求:

  • JDK 1.8及以上版本
  • Appium Server(命令行版或Desktop版均可)
  • 配置好ANDROID_HOME环境变量的Android SDK
  • 与本地Chrome版本匹配的ChromeDriver(可放在系统PATH或项目根目录)
  • 项目引入依赖(以Maven为例):
    <dependencies>
        <!-- Selenium Java客户端 -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.15.0</version>
        </dependency>
        <!-- Appium Java客户端 -->
        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>8.5.1</version>
        </dependency>
    </dependencies>
    

初始化两个Driver的代码示例

在同一个Java类中分别初始化AndroidDriver(控制安卓APP)和ChromeDriver(控制网页),各自配置对应的Desired Capabilities即可:

import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;

public class CrossPlatformCallAutomation {
    private static AndroidDriver androidDriver;
    private static ChromeDriver webDriver;

    // 初始化AndroidDriver
    private static void setupAndroidDriver() throws MalformedURLException {
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("platformName", "Android");
        caps.setCapability("deviceName", "你的设备名称(比如emulator-5554或真机型号)");
        caps.setCapability("appPackage", "你的安卓APP包名");
        caps.setCapability("appActivity", "APP的启动Activity路径");
        caps.setCapability("automationName", "UiAutomator2");
        caps.setCapability("noReset", true); // 避免每次启动重置APP状态
        caps.setCapability("autoGrantPermissions", true); // 自动授予APP所需权限

        // 连接本地Appium服务,默认端口4723
        androidDriver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), caps);
    }

    // 初始化ChromeDriver
    private static void setupChromeDriver() {
        // 如果ChromeDriver不在系统PATH中,需要手动指定路径
        // System.setProperty("webdriver.chrome.driver", "./chromedriver.exe");
        webDriver = new ChromeDriver();
        webDriver.manage().window().maximize();
    }

    public static void main(String[] args) throws MalformedURLException, InterruptedException {
        // 1. 初始化两个Driver
        setupAndroidDriver();
        setupChromeDriver();

        // 2. 安卓APP端发起通话
        // 定位并点击发起通话的按钮(替换成你APP的实际元素定位符)
        androidDriver.findElement(By.id("com.your.app:id/btn_initiate_call")).click();
        // 等待通话请求发送到网页端(根据实际场景调整等待逻辑)
        Thread.sleep(3000);

        // 3. 网页端登录并接听通话
        webDriver.get("https://你的网页通话系统地址");
        // 登录操作(替换成网页的实际元素定位符)
        webDriver.findElement(By.id("username_input")).sendKeys("your_login");
        webDriver.findElement(By.id("password_input")).sendKeys("your_password");
        webDriver.findElement(By.id("login_button")).click();

        // 使用显式等待替代Thread.sleep,更稳定
        WebDriverWait wait = new WebDriverWait(webDriver, Duration.ofSeconds(10));
        wait.until(ExpectedConditions.elementToBeClickable(By.id("accept_call_btn"))).click();

        // 4. 测试完成后关闭资源
        androidDriver.quit();
        webDriver.quit();
    }
}

关键注意事项

  • 同步逻辑:尽量用WebDriverWait显式等待替代固定时长的Thread.sleep(),避免因加载速度差异导致的元素定位失败
  • 权限处理:安卓端通过autoGrantPermissions自动授权,避免手动弹窗干扰自动化流程
  • 设备验证:运行前用adb devices确认设备已正常连接,模拟器或真机都可以
  • 版本兼容:确保ChromeDriver版本与本地Chrome浏览器版本一致,Appium Java Client版本与Appium Server版本兼容

内容的提问来源于stack exchange,提问作者Gireesh K K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:05:25