Selendroid 服务器无法在设备上启动:权限拒绝:启动检测



考虑使用Selendroid自动化我们的Android设备测试。由于我刚刚处于研究阶段,我正在使用从他们的网站下载的selendroid-test-app。

我最近买了一台新机器。我的代码和设置在上一个上一个上运行良好。

我的JAVA_HOME设置为:C:Program FilesJavajdk1.8.0_45我的ANDROID_HOME是C:Program Files (x86)Androidandroid-sdk我通过在本地目录中的控制台中运行以下命令来独立启动 selendroid:

java -jar selendroid-standalone-0.15.0-with-dependencies.jar -app selendroid-test-app-0.15.0.apk

这会让 apk 正常:

INFO: Executing shell command: C:Program FilesJavajdk1.8.0_45binjarsigner.exe -sigalg MD5withRSA -digestalg SHA1 -signedjar c:SeleniumDriversresigned-selendroid-test-app-0.15.0.apk -storepass android -keystore C:Usersrekab.androiddebug.keystore c:SeleniumDriversselendroid-test-app-0.15.0.apk androiddebugkey
Jun 12, 2015 8:16:14 AM io.selendroid.standalone.io.ShellCommand exec
INFO: Shell command output
-->
jar signed.

然后我从Visual Studio(C#)开始测试:

DesiredCapabilities caps = DesiredCapabilities.Android();
caps.SetCapability("browserName", "selendroid");
caps.SetCapability("aut", "io.selendroid.testapp:0.15.0");  
TouchCapableRemoteWebDriver driver = new TouchCapableRemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), caps);

TouchCapableRemoteWebDriver 是实现 IHasTouchScreen 的 RemoteWebDriver 的包装器。

创建驱动程序后,selendroid-test-app 可以很好地安装在手机上:

INFO: Executing shell command: C:Program Files (x86)Androidandroid-sdkplatform-toolsadb.exe -s FA34HW903620 install -r c:SeleniumDriversresigned-selendroid-test-app-0.15.0.apk
Jun 12, 2015 8:17:52 AM io.selendroid.standalone.io.ShellCommand exec
INFO: Shell command output
-->
pkg: /data/local/tmp/resigned-selendroid-test-app-0.15.0.apk
Success
rm failed for -f, No such file or directory
3560 KB/s (511417 bytes in 0.140s)
<--
Jun 12, 2015 8:17:53 AM io.selendroid.standalone.io.ShellCommand exec
INFO: Executing shell command: C:Program Files (x86)Androidandroid-sdkplatform-toolsadb.exe -s FA34HW903620 shell pm list packages io.selendroid.io.selendroid.testapp
Jun 12, 2015 8:17:54 AM io.selendroid.standalone.io.ShellCommand exec
INFO: Shell command output
-->
package:io.selendroid.io.selendroid.testapp
<--

但是,当它启动检测时,我收到一个异常:

INFO: Executing shell command: C:Program Files (x86)Androidandroid-sdkplatform-toolsadb.exe -s FA34HW903620 shell am instrument -e main_activity io.selendroid.testapp.HomeScreenActivity -e server_port 8080 io.selendroid.io.selendroid.testapp/io.selendroid.server.ServerInstrumentation
Jun 12, 2015 8:17:55 AM io.selendroid.standalone.io.ShellCommand exec
INFO: Shell command output
-->
java.lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{io.selendroid.io.selendroid.testapp/io.selendroid.server.ServerInstrumentation} from pid=26099, uid=26099 not allowed because package io.selendroid.io.selendroid.testapp does not have a signature matching the target io.selendroid.testapp
        at android.os.Parcel.readException(Parcel.java:1430)
        at android.os.Parcel.readException(Parcel.java:1384)
        at android.app.ActivityManagerProxy.startInstrumentation(ActivityManagerNative.java:2839)
        at com.android.commands.am.Am.runInstrument(Am.java:615)
        at com.android.commands.am.Am.run(Am.java:118)
        at com.android.commands.am.Am.main(Am.java:81)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:257)
        at dalvik.system.NativeStart.main(Native Method)
<--

显然,测试无法开始。出了什么问题?即使使用新机器,它仍然在工作,直到我从手机上卸载应用程序并再次运行测试。它现在重新安装,但手机上的服务器无法启动?

感谢您的任何帮助!

问题是,在您的手机上,应用程序 selendroid 使用旧机器上的密钥签名,而测试的应用程序使用新机器上生成的密钥签名,这两者不匹配。

解决方案:从手机中卸载selendroidtested app这两个应用程序,Selendroid将安装它们,并使用相同的密钥签名。

最新更新