如何通过Espresso检查拨号器上的电话号码-通过自动链接触发的拨号器

时间:2018-11-23 12:15:43

标签: android android-intent android-espresso

我正在尝试检查电话拨号器是否通过Espresso用正确的电话号码打开,但到目前为止还不能真正做到这一点。 我尝试过:

    Intents.init();

    Intent stubIntent = new Intent();
    Instrumentation.ActivityResult stubResult = new Instrumentation.ActivityResult(Activity.RESULT_OK, stubIntent);
    intending(hasAction(Intent.ACTION_DIAL)).respondWith(stubResult);
    intended(Matchers.allOf(hasAction(Intent.ACTION_DIAL), hasData(Uri.parse("+3531234567"))));

还有

    Intents.init();

    intended(allOf(hasAction(Intent.ACTION_DIAL), hasData(Uri.parse("+3531234567"))));

是否可以通过XML上的TextView上的自动链接触发拨号程序?

android:autoLink="all"

那是Espresso打开的拨号器

enter image description here

非常感谢。

2 个答案:

答案 0 :(得分:1)

我相信您需要在电话号码前加上tel:,因此请尝试:

Uri.parse("tel:+3531234567")

答案 1 :(得分:1)

它似乎真的不能与自动链接一起使用,并且基于@Aaron的强大帮助,这对我很有用。

1- 从TextView中删除自动链接

2- 通常通过OnClickListener触发意图

tvCallNumber.setText(phone); // phone = +3531234567

    tvCallNumber.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_DIAL);
            intent.setData(Uri.parse("tel:" + phone)); 
            startActivity(intent);
        }
    });

3-确保电话号码以 前缀“ tel:”

4-测试操作的 正确顺序

    Intents.init();

    Intent stubIntent = new Intent();
    Instrumentation.ActivityResult stubResult = new Instrumentation.ActivityResult(Activity.RESULT_OK, stubIntent);

    intending(hasAction(Intent.ACTION_DIAL)).respondWith(stubResult);
    onView(withId(R.id.tv_call_number)).perform(click());
    intended(Matchers.allOf(hasAction(Intent.ACTION_DIAL), hasData(Uri.parse("tel:+3531234567"))));