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

能否用Appium自动化移动端Microsoft认证登录及OTP验证流程?

Appium自动化移动端Microsoft认证登录流程方案

一、是否可行?

可以用Appium自动化移动端的Microsoft认证登录流程,但需要处理WebView上下文切换以及后续的OTP验证码环节,部分场景依赖设备权限或额外配置。

二、基础登录流程实现步骤

1. 配置Desired Capabilities

确保开启WebView支持,并匹配对应版本的chromedriver:

DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("platformName", "Android");
caps.setCapability("deviceName", "emulator-5554");
caps.setCapability("appPackage", "com.your.target.app");
caps.setCapability("appActivity", "com.your.target.app.LoginActivity");
caps.setCapability("autoWebview", false); // 手动切换上下文更可控
caps.setCapability("chromedriverExecutable", "/path/to/matched/chromedriver"); // 需与设备WebView版本一致

2. 切换到Microsoft登录WebView

输入邮箱后跳转的登录页面通常是WebView,需切换上下文:

// 获取所有上下文
Set<String> contexts = driver.getContextHandles();
// 切换到WebView上下文
for (String context : contexts) {
    if (context.contains("WEBVIEW")) {
        driver.context(context);
        break;
    }
}

3. 操作登录元素

用WebDriver常规定位方式完成邮箱、密码输入:

// 输入邮箱
driver.findElement(By.id("i0116")).sendKeys("test@outlook.com");
// 点击下一步
driver.findElement(By.id("idSIButton9")).click();
// 输入密码
driver.findElement(By.id("i0118")).sendKeys("your_test_password");
// 点击登录
driver.findElement(By.id("idSIButton9")).click();

4. 处理后续提示与切回原生应用

登录后可能出现"保持登录"提示,处理后切回原生上下文:

// 点击"不保持登录"(根据需求调整)
driver.findElement(By.id("idBtn_Back")).click();
// 切回原生应用上下文
driver.context("NATIVE_APP");

三、OTP验证码的自动化实现

OTP环节可以通过以下几种方式实现自动化:

1. 读取移动端短信(Android优先)

通过Appium调用原生API读取含OTP的短信,需提前授予READ_SMS权限:

// 执行原生脚本读取最新Microsoft验证码
String smsScript = "var resolver = android.content.Context.getContentResolver();" +
                   "var cursor = android.provider.Telephony.SMS.Inbox.query(resolver, null, null, null);" +
                   "var otp = '';" +
                   "while(cursor.moveToNext()){" +
                   "    var body = cursor.getString(cursor.getColumnIndex('body'));" +
                   "    if(body.indexOf('Microsoft verification code') !== -1){" +
                   "        otp = body.match(/\\d{6}/)[0];" + // 匹配6位数字OTP
                   "        break;" +
                   "    }" +
                   "}" +
                   "cursor.close();" +
                   "return otp;";
String otpCode = (String) driver.executeScript(smsScript);
// 将OTP输入到对应输入框(需切回对应上下文)
driver.findElement(By.id("otp_input_field")).sendKeys(otpCode);

iOS因沙箱限制,读取短信需依赖XCTest扩展或第三方工具,实现成本较高。

2. 调用Microsoft Graph API(需权限)

若测试账号拥有Microsoft Graph API的相关权限,可直接调用接口获取验证码,无需依赖设备短信。

3. 第三方短信服务API

如果OTP通过第三方短信服务商发送,可调用其提供的API获取最新验证码。

四、常见问题解决

  • WebView切换失败:检查chromedriver版本与设备WebView/Chrome版本是否完全匹配,可通过chrome://version查看设备WebView版本。
  • 元素定位失效:Microsoft登录页面元素ID可能随版本变更,可改用文本定位,如By.xpath("//button[contains(text(), 'Next')]")。
  • 权限不足:Android端添加autoGrantPermissions: true到Desired Capabilities,或手动授予短信读取权限。

内容的提问来源于stack exchange,提问作者Ruchika Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:53:15