我正在开发一种QA自动化解决方案,可以在Android上记录/回放QA测试.关键业务要求是在回放录制的测试时不依赖于连接的PC.为此,我试图在没有连接PC的情况下运行仪器测试.(具体来说,是Appium UiAutomator2测试).
我目前的方法是尝试从我的应用程序以编程方式运行测试.如果我通常从连接的PC运行测试,我会使用该命令adb shell am instrument -w.我尝试从我的应用程序访问ADB Shell并运行am instrument -w,但这会产生错误,我错过了INTERACT_ACROSS_USERS_FULL权限.
为了解决这个问题,我尝试使用startInstrumentation运行测试.这成功地开始了测试.但是,测试立即崩溃.经过进一步调查,我将崩溃追踪到NPE:测试试图检索InstrumentationRegistry.getInstrumentation.getUiAutomation(0),但是返回null.
如何以编程方式运行测试并授予其访问所需的UiAutomation实例的权限?
这就是我开始测试的方式:
public void runTest() {
final String pm = getPackageName().replaceFirst(".test$", "");
final InstrumentationInfo info = getInstrumentationInfo(pm);
if (info != null) {
final ComponentName cn = new ComponentName(info.packageName,
info.name);
Bundle arguments = new Bundle();
arguments.putString("class", "io.testim.appiumwrapper.test.AppiumUiAutomator2Server");
//cn = {io.extension.test/android.support.test.runner.AndroidJUnitRunner}
startInstrumentation(cn, null, arguments);
}
}
Run Code Online (Sandbox Code Playgroud) android android-testing appium android-instrumentation appium-android
java automated-tests appium android-uiautomator appium-android
我无法运行之前运行的自动化脚本。当我尝试在新设备中运行相同的代码时,它工作正常。
Appium 服务器日志
[UiAutomator2] 运行命令:'adb -s K3V4C18B16002502 shell am instrument -w io.appium.uiautomator2.server.test/android.support.test.runner.AndroidJUnitRunner' [UiAutomator2] 等待 UiAutomator2 在线时间长达 20000 毫秒。 . [debug] [JSONWP Proxy] 将 '/status' 与命令名称 'getStatus' 匹配 [debug] [JSONWP Proxy] 将 [GET /status] 代理到 [GET http://localhost:8200/wd/hub/status]与没有正文 [JSONWP 代理] 得到了一个意外的响应:{"errno":"ECONNRESET","code":"ECONNRESET","syscall":"read"} [debug] [JSONWP 代理] 匹配 '/status' 到命令name 'getStatus' [debug] [JSONWP Proxy] 代理 [GET /status] 到 [GET http://localhost:8200/wd/hub/status]没有正文 [JSONWP 代理] 得到意外响应:{"errno":"ECONNRESET","code":"ECONNRESET","syscall":"read"} [debug] [UiAutomator2] [UIAutomator2] android.util。 AndroidException: INSTRUMENTATION_FAILED: io.appium.uiautomator2.server.test/android.support.test.runner.AndroidJUnitRunner [debug] [UiAutomator2] [UIAutomator2] INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{io.appium.uiautomator2 .server.test/android.support.test.runner.AndroidJUnitRunner} [debug] …
我的应用需要多应用许可。我需要通过允许或拒绝其他权限来检查我的应用程序的行为。如何从appium启用/禁用app权限以创建多个方案?
例如,假设我的应用需要权限:permission1和permission2。
scenario 1 = allow permission1 allow permission2
scenario 2 = allow permission1 deny permission2
scenario 3 = deny permission1 allow permission2
scenario 4 = deny permission1 deny permission2
Run Code Online (Sandbox Code Playgroud) 我在 .bash_profile 中设置 ANDROID_HOME 并运行 source ~/.bash profile 但在关闭并打开终端后然后运行 echo $ANDROID_HOME return blank
.bash_profile
source ~/.bash_profile
export PATH="/usr/local/opt/openssl/bin:$PATH"
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export ANDROID_HOME=/Users/Najibah/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platfrom-tools
Run Code Online (Sandbox Code Playgroud)