如何获得活动并将其传递给Spoon.screenshot

问题描述

package com.github.avanlex;
import android.Manifest;
import android.app.Activity;

import androidx.test.ext.junit.rules.ActivityScenarioRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import androidx.test.rule.GrantPermissionRule;

import com.squareup.spoon.Spoon;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class AnagramsTextReverseBehaviorTest {

    public static final String STRING_TO_BE_TYPED = "espresso";
    public static final String STRING_TO_BE_EXPECTED = "osserpse";
    private static final String PACKAGE_NAME = "com.github.avanlex";

    /*********************************************************************************************
     * Google recommends using ActivityScenarioRule instead ActivityTestRule,but I don't kNow How?
     *********************************************************************************************
     */
    @Rule public ActivityScenarioRule<MainActivity> activityScenarioRule
            = new ActivityScenarioRule<>(MainActivity.class);  

    @Test
    public void changeText_sameActivity() {
        // Type text and then press the button.
        onView(withId(R.id.tietStringToReverse))
            .perform(typeText(STRING_TO_BE_TYPED),closeSoftKeyboard());
        onView(withId(R.id.btnReverse)).perform(click());
        Activity activity = main.getActivity();  // GET ACTIVITY IS DEPRECATED :(
        activityScenarioRule.getScenario().onActivity(act -> { 
            // CAUSES ERROR
            Spoon.screenshot(act,"changeText_sameActivity");
        });
        //Spoon.screenshot(activity,"changeText_sameActivity");
        // Check that the text was reversed.
        onView(withId(R.id.tietReversedString)).check(matches(withText(STRING_TO_BE_EXPECTED)));
    }
}

我正在尝试获取“活动”并传递给Spoon进行屏幕截图,但Google文档说 getActivity()中的androidx.test.rule.ActivityTestRule已过时。

我尝试过:

    @Rule public final ActivityTestRule<MainActivity> main = new ActivityTestRule(MainActivity.class,true);

效果很好,但是在Google文档中已将其标记为已弃用。

然后我搜索了避免不推荐使用的API来更新代码方法

        activityScenarioRule.getScenario().onActivity(act -> { 
            // CAUSES ERROR: java.util.concurrent.ExecutionException: 
            // java.lang.IllegalArgumentException: Could not find test class!
            Spoon.screenshot(act,"changeText_sameActivity");
        });

我发现获得活动的唯一方法导致应用程序崩溃。 请帮忙?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)