android SettingsPanelTest fail问题分析

最近在项目过程,如下fail项
nfcPanel_correctPackage
nfcPanel_doneClosesPanel

记录一下解决思路和过程,首先是配置CTS环境,这个是基础,wwindow/linux 都可以配置,大部分测试都可以在自己的电脑进行,当然有些需要特殊网络环境。

配置环境很重要,解决CTS问题也是一个debug的过程,电脑上没有验证环境,很影响解决问题的效率。

对于CTS问题,电脑上能复现,基本上就解决了一大半,对于一个必现的问题,后面只是时间问题

1.CTS环境配置

CTS环境准备和运行
https://source.android.google.cn/compatibility/cts/setup?hl=zh-cn
https://source.android.google.cn/compatibility/cts/run?hl=zh-cn

环境配置主要是adb/appt/jdk

2.问题分析

找到对应的代码文件,直接在源代码的cts/tests/目录下面用grep命令搜

以nfcPanel_correctPackage为例

    @Test
    public void nfcPanel_doneClosesPanel() {
        // Launch panel
        launchNfcPanel();
        String currentPackage = mDevice.getCurrentPackageName();
        assertThat(currentPackage).isEqualTo(mSettingsPackage);

        // Click the done button
        pressDone();

        // Assert that we have left the panel
        currentPackage = mDevice.getCurrentPackageName();
        assertThat(currentPackage).isNotEqualTo(mSettingsPackage);
    }

代码逻辑比较简单,通过Settings.Panel.ACTION_NFC这个action来启动nfc panel,然后和包名是否是预期的

    private void launchNfcPanel() {
        assumeTrue(mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC));
        launchPanel(Settings.Panel.ACTION_NFC);
    }
 
    private void launchPanel(String action) {
        // Start from the home screen
        mDevice.pressHome();
        mDevice.wait(Until.hasObject(By.pkg(mLauncherPackage).depth(0)), TIMEOUT);

        Intent intent = new Intent(action);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);    // Clear out any previous instances
        mContext.startActivity(intent);

        // Wait for the app to appear
        mDevice.wait(Until.hasObject(By.pkg(mSettingsPackage).depth(0)), TIMEOUT);
    }   
    

电脑上也很容易复现,通过

adb shell am start -a android.settings.panel.action.NFC

从AndroidManifest.xml里面可以看出,action启动的是SettingsPanelActivity,加载PanelFragment

        mPanel = FeatureFactory.getFactory(activity)
                .getPanelFeatureProvider()
                .getPanel(activity, panelType, mediaPackageName);

此处启动的是NFC ,对应NfcPanel,控制显示的是在NfcPreferenceController

public int getAvailabilityStatus() {
        return mNfcAdapter != null
                ? AVAILABLE
                : UNSUPPORTED_ON_DEVICE;
}

由于之前的定制修改,此处返回了UNSUPPORTED_ON_DEVICE,修改后验证可以pass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值