Android 如果我只有apk文件,如何在robotium中使用R.id

Android 如果我只有apk文件,如何在robotium中使用R.id,android,testing,robotium,Android,Testing,Robotium,我想从play market测试一个应用程序。我在尝试使用时遇到了问题 solo.clickOnView(solo.getView(cn.wps.moffice_eng.R.id.writer_edittoolbar_saveBtn)); cn-cn不能解析为变量 我怎样才能解决这个问题?据我所知,robotium不能使用R.id,因为我没有测试应用程序中的R.id文件 我的代码 package com.example.android.apis.test; import androi

我想从play market测试一个应用程序。我在尝试使用时遇到了问题

solo.clickOnView(solo.getView(cn.wps.moffice_eng.R.id.writer_edittoolbar_saveBtn));
cn-cn不能解析为变量

我怎样才能解决这个问题?据我所知,robotium不能使用R.id,因为我没有测试应用程序中的R.id文件

我的代码

    package com.example.android.apis.test;

import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ListView;

import com.jayway.android.robotium.solo.Solo;



            @SuppressWarnings("unchecked")
            public class Test extends ActivityInstrumentationTestCase2 {

                    private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "cn.wps.moffice.documentmanager.PreStartActivity";

                    private static Class<?> launcherActivityClass;
                    static{
                            try {
                                    launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
                            } catch (ClassNotFoundException e) {
                                    throw new RuntimeException(e);
                            }
                    }

                    @SuppressWarnings("unchecked")
                    public Test() throws ClassNotFoundException {
                            super(launcherActivityClass);
                    }

                    private Solo solo;

                    @Override
                    protected void setUp() throws Exception {
                            solo = new Solo(getInstrumentation(), getActivity());
                    }

                    public void testSimple() {

                        solo.sleep(2000);                   
                        solo.clickOnButton(1);
                        solo.sleep(2000);
                        solo.clickOnImage(6);
                        solo.sleep(2000);
                        solo.clickInList(0);
                        solo.sleep(5000);

                        solo.sendKey(KeyEvent.KEYCODE_P);
                        solo.sendKey(KeyEvent.KEYCODE_R);
                        solo.sendKey(KeyEvent.KEYCODE_O);

                        solo.sendKey(Solo.ENTER);
                        solo.sleep(2000);


                        solo.clickOnView(solo.getView(cn.wps.moffice_eng.R.id.writer_edittoolbar_saveBtn));

                    }


                    @Override
                    public void tearDown() throws Exception {
                            solo.finishOpenedActivities();

              }
            }
package com.example.android.api.test;
导入android.test.ActivityInstrumentationTestCase2;
导入android.util.Log;
导入android.view.KeyEvent;
导入android.view.view;
导入android.widget.ListView;
导入com.jayway.android.robotium.solo.solo;
@抑制警告(“未选中”)
公共类测试扩展了ActivityInstrumentationTestCase2{
私有静态最终字符串启动器\u ACTIVITY\u FULL\u CLASSNAME=“cn.wps.moffice.documentmanager.prestarctivity”;
私有静态类启动器ActivityClass;
静止的{
试一试{
launcherActivityClass=Class.forName(LAUNCHER\u ACTIVITY\u FULL\u CLASSNAME);
}catch(classnotfounde异常){
抛出新的运行时异常(e);
}
}
@抑制警告(“未选中”)
public Test()抛出ClassNotFoundException{
超级(活动类);
}
私人独奏;
@凌驾
受保护的void setUp()引发异常{
solo=新的solo(getInstrumentation(),getActivity());
}
公共void testSimple(){
solo.sleep(2000年);
点击按钮(1);
solo.sleep(2000年);
独奏。点击图像(6);
solo.sleep(2000年);
单击列表(0);
单人睡眠(5000);
solo.sendKey(KeyEvent.KEYCODE\P);
solo.sendKey(KeyEvent.KEYCODE\R);
solo.sendKey(KeyEvent.KEYCODE_O);
solo.sendKey(solo.ENTER);
solo.sleep(2000年);
solo.clickOnView(solo.getView(cn.wps.moffice\u eng.R.id.writer\u edittoolbar\u saveBtn));
}
@凌驾
public void tearDown()引发异常{
solo.finishOpenedActivities();
}
}
并表明

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.example.android.apis.test">

    <uses-sdk android:minSdkVersion="13"/>

    <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.wps.moffice_eng"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
        <uses-library android:name="android.test.runner"/>
    </application>

</manifest>


我的解决方案:我找到了解决方案-我将apk文件end pull R.id文件反编译到robotium项目-这是我问题的关键时刻

使用
getView(String id)
,它是在robotium 4.2中引入的。应该是这样的:

solo.clickOnView(solo.getView("cn.wps.moffice_eng.R.id.writer_edittoolbar_saveBtn"));
solo.clickOnView(solo.getView("resourceId"));

第一步是退出将要测试的apk

然后我使用如下脚本:

View view = solo.getView(com.test.app.R.id.resourceId);
solo.clickOnView(view);

正如@Renas所建议的,
getView(stringid)
是您所需要的

robotium 5.0.1中,您应该只使用id字符串,而不是全名。应该是这样的:

solo.clickOnView(solo.getView("cn.wps.moffice_eng.R.id.writer_edittoolbar_saveBtn"));
solo.clickOnView(solo.getView("resourceId"));

junit.framework.AssertionFailedError:视图为空,因此无法单击它找不到任何视图。“cn.wps.moffice\u eng.R.id.writer\u edittoolbar\u saveBtn”对吗?其他R.id元素也会出现这种情况,您可以尝试:solo.clickOnView(solo.getView(“writer\u edittoolbar\u saveBtn”);或者类似的。它说,“不能解析为变量”。当然,当它在移动设备上执行时,会发现这个包名,但编译器呢?编译器不知道这个包?您的示例很有用。Thx+1我找到了解决方案——我将apk文件end pull R.id文件反编译到robotium项目中——这是我问题的关键时刻