我目前正在使用Robotium进行android测试,当我在Android 2.3模拟器中执行以下testcase时出现错误 “java.lang.SecurityException:WifiService:用户10038和当前进程都没有android.permission.CHANGE_WIFI_STATE。”
测试代码:
public void testScheduledPayments()
{
solo.clickOnButton(0);
solo.enterText(0, "demo");
solo.enterText(1,"password");
solo.clickOnButton("Log In");
WifiManager wifiMan = (WifiManager) solo.getCurrentActivity().getSystemService(Context.WIFI_SERVICE);
wifiMan.setWifiEnabled(false);
solo.clickOnText("Payments");
solo.clickInList(2);
solo.waitForText("Loading paymnets");
solo.clickInList(0);
solo.clickOnMenuItem("Logout");
solo.clickOnButton("Logout");
solo.finishOpenedActivities();
}
在我的清单档案中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tesaptra"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.info.native" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
</manifest>
这是我的日志cat文件
java.lang.SecurityException: WifiService: Neither user 10038 nor current process has android.permission.CHANGE_WIFI_STATE.
at android.os.Parcel.readException(Parcel.java:1322)
at android.os.Parcel.readException(Parcel.java:1276)
at android.net.wifi.IWifiManager$Stub$Proxy.setWifiEnabled(IWifiManager.java:614)
at android.net.wifi.WifiManager.setWifiEnabled(WifiManager.java:713)
at com.testaptra.Payments.testScheduledPaymnets(Payments.java:113)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
我已将所有<strong>权限添加到manifest.xml ,但没有运气。如果您熟悉以下问题,请帮助我吗?
提前致谢
答案 0 :(得分:8)
必须在目标应用程序中设置权限。测试应用程序中的权限完全被忽略。这意味着instrumnetation apk从来没有比目标应用更多的特权。
答案 1 :(得分:1)
事实上,可以为您的测试应用程序提供比实际应用程序更多的权限,但要做到这一点,您必须对您的Android清单做一些偷偷摸摸的事情。
您需要做的是在您的清单中为您的应用提供相同的android:sharedUserId,这意味着如果要么添加一个额外的权限,他们都可以访问它。使用它可以让你的测试应用程序有很多权限来处理它想要的任何东西,我已经使用了这种方法和不同的方法(制作一个意图服务,你的测试应用程序可以激发意图来做通常不可行的事情你正在测试的应用程序)来测试你正在尝试的那种场景。