如何在AWS Device Farm中实现Appium Java(TestNG)生物识别测试
AWS Device Farm + Appium Java(TestNG)生物识别测试实现方案
环境配置前置要求
- 选择测试设备时优先选用模拟器环境,AWS Device Farm托管真机目前暂不支持原生Appium生物识别调用接口
- 模拟器配置阶段需确认生物识别功能开关处于开启状态,测试安装包需关闭生物识别硬件强校验规则,避免拦截模拟器的模拟识别请求
Android端适配
你当前使用的driver.fingerPrint(1)为Appium官方Android模拟器专属接口,可直接在AWS Device Farm的Android 6.0+模拟器环境运行,只需补充前置初始化逻辑:
- 在TestNG的
@BeforeTest生命周期方法中执行adb命令预注册指纹ID:adb -e emu finger touch 1,确保系统已存在对应指纹记录 - 若需验证识别失败场景,传入未注册的指纹ID即可,例如
driver.fingerPrint(2)
iOS端适配
你当前使用的driver.performTouchID(true)仅适配低版本iOS模拟器,建议替换为通用的Appium生物识别执行脚本,适配iOS 13.0+所有模拟器环境:
- 先调用生物识别注册脚本,在
@BeforeTest阶段执行:
Map<String, Object> enrollArgs = ImmutableMap.of("isEnabled", true); driver.executeScript("mobile: enrollBiometric", enrollArgs);
- 触发识别时根据场景调用对应脚本,无需区分Touch ID/Face ID:
// 识别成功场景 Map<String, Object> matchArgs = ImmutableMap.of("match", true); driver.executeScript("mobile: sendBiometricMatch", matchArgs); // 识别失败场景 Map<String, Object> failArgs = ImmutableMap.of("match", false); driver.executeScript("mobile: sendBiometricMatch", failArgs);
通用封装示例
可封装为工具方法直接在测试用例中调用,兼容双端场景:
import com.google.common.collect.ImmutableMap; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.ios.IOSDriver; public class BiometricTestUtil { public void triggerBiometric(AppiumDriver driver, boolean isSuccess) { if (driver instanceof AndroidDriver) { ((AndroidDriver) driver).fingerPrint(isSuccess ? 1 : 2); return; } Map<String, Object> enrollArgs = ImmutableMap.of("isEnabled", true); driver.executeScript("mobile: enrollBiometric", enrollArgs); Map<String, Object> matchArgs = ImmutableMap.of("match", isSuccess); driver.executeScript("mobile: sendBiometricMatch", matchArgs); } }
内容的提问来源于stack exchange,提问作者Gagan Chawla
相关产品推荐
相关产品推荐

