标签: android-espresso

未解析的参考:导入 androidx.test.ext.junit.rules.ActivityScenarioRule 时的 ext

最近,我决定更新我的 Espresso 代码以使用ActivityScenarioRule已弃用的ActivityTestRule.

为此,我将以下库导入到我的项目中:

在此输入图像描述

最终代码使用ActivityScenarioRule

package com.realtomjoney.pyxlmoose.activities.main

import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers.*
import com.realtomjoney.pyxlmoose.R
import org.junit.Rule
import org.junit.Test
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.filters.LargeTest
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
import org.junit.runner.RunWith


@LargeTest
@RunWith(AndroidJUnit4ClassRunner::class)
class MainActivityTestsWhenNewProjectIsCreated {
    @get:Rule
    var activityTestRule = ActivityScenarioRule(MainActivity::class.java)

    private fun createNewProject() {
        onView(withId(R.id.floatingActionButton)).perform(click())
        onView(withId(R.id.fragmentNewCanvas_projectTitleTextInputEditText)).perform(ViewActions.replaceText("Untitled Project"))
        onView(withId(R.id.fragmentNewCanvas_spanCountTextInputEditText)).perform(ViewActions.replaceText("5"))
        onView(withId(R.id.fragmentNewCanvas_doneButton)).perform(click())
    }

    @Test
    fun uitest_fragmentNewCanvasProjectTitleTextInputEditText_isNotDisplayed_after_fragmentNewCanvasDoneButton_isPressed() {
        createNewProject()
        onView(withId(R.id.fragmentNewCanvas_projectTitleTextInputEditText)).check(ViewAssertions.doesNotExist())
    }

    @Test
    fun uitest_fragmentNewCanvasProjectTitleTextInputLayout_isNotDisplayed_after_fragmentNewCanvasDoneButton_isPressed() {
        createNewProject()
        onView(withId(R.id.fragmentNewCanvas_projectTitleTextInputLayout)).check(ViewAssertions.doesNotExist())
    }

    @Test
    fun uitest_fragmentNewCanvasSpanCountTextInputEditText_isNotDisplayed_after_fragmentNewCanvasDoneButton_isPressed() {
        createNewProject()
        onView(withId(R.id.fragmentNewCanvas_spanCountTextInputEditText)).check(ViewAssertions.doesNotExist())
    }

    @Test
    fun …
Run Code Online (Sandbox Code Playgroud)

java junit android kotlin android-espresso

2
推荐指数
1
解决办法
2339
查看次数

Espresso测试的Android Studio项目设置

大约一个星期前,我问过这个问题

为什么库模块android.support.test在添加依赖项中不可见

经过多次头部刮擦和项目设置变形后,我发现这个app/build.gradle依赖配置让我比以前更进一步,因为至少项目编译但是在尝试运行时没有构建:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.1'

    defaultConfig {
        applicationId "com.my.package.name"
        minSdkVersion 8
        targetSdkVersion 22
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    sourceSets { main { java.srcDirs = ['src/main/java', 'src/androidTest/java'] } }

    packagingOptions {
        exclude 'LICENSE.txt'
    }

}

dependencies {
    compile 'com.android.support:appcompat-v7:22.1.0'
    compile 'com.android.support:support-v4:22.1.0'
    compile 'com.android.support.test.espresso:espresso-core:2.1'
    compile 'com.android.support.test:testing-support-lib:0.1'
}
Run Code Online (Sandbox Code Playgroud)

请注意,compile而不是androidTestCompile测试支持依赖项.使用androidTestCompile上述问题中提到的问题的结果.

另请注意sourceSets声明中的两个srcDirs.当我手动创建androidTest/java目录时,该声明自动设置.这应该以不同的方式宣布吗

同样,getDefaultProguardFile在ide中用工具提示"无法解析符号'getDefaultProguardFile'"加下划线.如果这是至关重要的.

这种新的启示,切换androidTestCompilecompile,让我相信有什么毛病我成立了项目结构的单元测试的方式.这是我的项目结构图:项目文件夹结构

我应该提一下,从Eclipse迁移时会自动创建这个项目/模块结构.通过图标装饰,它看起来至少将我的测试类识别为测试类.

但现在我陷入了这个错误:

错误:任务':mymodule:dexDebug'的执行失败.com.android.ide.common.internal.LoggedErrorException:无法运行命令:C:\ …

java android android-studio android-espresso

1
推荐指数
1
解决办法
7603
查看次数

Espresso如何在不使用R.id.viewid的情况下访问视图,就像我们在robotium中一样?

我正在从机器人切换到浓缩咖啡,我正在使用apk编写测试,我无法访问代码.在使用solo.getView("view-id")的robotium中,我们可以访问视图,但我不知道如何在浓缩咖啡中进行操作?espresso witId()方法需要R.id.viewid,我无权访问.

public class AaEspressoTest {

private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.tri.re.CordActivity";
private static Class<?> launcherActivityClass;

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

@Rule
public ActivityTestRule<?> mActivityRule = new ActivityTestRule(launcherActivityClass);


@Test public void testHello() throws Exception{

    onView(withText("Browse older recordings")).perform(click());

   //Id is not accessible shows red
    onView(withId(R.id.button)).perform(click());

}

}
Run Code Online (Sandbox Code Playgroud)

android junit4 robotium android-testing android-espresso

1
推荐指数
1
解决办法
1913
查看次数

Espresso:adapterView中的字符串

如果一个字符串显示在listAdapter的一个或多个项目中,那么android-espresso是否可以验证?

试着像这样的人:

onData(anything()).inAdapterView(withId(R.id.test)).check(matches(hasToString("Anmeldung steht noch aus!")));
Run Code Online (Sandbox Code Playgroud)

testing android android-espresso

1
推荐指数
1
解决办法
3774
查看次数

浓咖啡检查是否显示了吐司(一个在另一个之上)

我在检查是否使用浓缩咖啡显示吐司时遇到问题。我正在上课:

       import android.os.IBinder;
    import android.support.test.espresso.Root;
    import android.view.WindowManager;
    import org.hamcrest.Description;
    import org.hamcrest.TypeSafeMatcher;

    public class ToastMatcher extends TypeSafeMatcher<Root> {

    @Override
    public void describeTo(Description description) {
        description.appendText("is toast");
    }

    @Override
    public boolean matchesSafely(Root root) {
        int type = root.getWindowLayoutParams().get().type;
        if ((type == WindowManager.LayoutParams.TYPE_TOAST)) {
            IBinder windowToken = root.getDecorView().getWindowToken();
            IBinder appToken = root.getDecorView().getApplicationWindowToken();
            if (windowToken == appToken) {
                // windowToken == appToken means this window isn't contained by any other windows.
                // if it was a window for an activity, it would have TYPE_BASE_APPLICATION. …
Run Code Online (Sandbox Code Playgroud)

testing android toast android-espresso

1
推荐指数
1
解决办法
2173
查看次数

如果EditText为空,则执行Espresso测试并失败

Android Studio 2.1.2

如果用户点击按钮并且用户名为空,我试图让测试失败.这是我的代码.但是,测试总是通过.有没有办法进行测试,如果它EditText是空的,它将失败.

@Test
public void shouldFailToLoginWithEmptyUserName() {
     onView(withId(R.id.btnSignIn)).perform(ViewActions.click());
     onView(withId(R.id.etUsername)).check(ViewAssertions.matches(withText("")));
}
Run Code Online (Sandbox Code Playgroud)

android android-espresso

1
推荐指数
1
解决办法
1837
查看次数

Espresso中的“ IdlingResourceTimeoutException”是什么?

我最近使用espresso对我的android应用程序进行测试。但是有时候测试用例通过了,有时候没有通过。这是一个很长的异步任务,大约需要30秒才能完成。当它失败时,它将抛出此异常:

IdlingResourceTimeoutException

那么,有谁知道为什么会发生这种异常,这种异常的含义是什么?

android android-espresso

1
推荐指数
1
解决办法
964
查看次数

使用Espresso滚动回收器视图

我有一个异构的回收站视图,我试图将其滚动到位置30处的项目。我的测试通过了,但是我看不到屏幕实际在滚动。

onView(withId(R.id.content_view))
    .perform(RecyclerViewActions.scrollToPosition(30));
Run Code Online (Sandbox Code Playgroud)

这就是我要做的滚动。

android android-espresso android-recyclerview android-espresso-recorder

1
推荐指数
2
解决办法
2306
查看次数

当我尝试使用espresso填充多个edittext时,抛出android.support.test.espresso.InjectEventSecurityException

这是我的代码:

onView(withId(R.id.first_name)).perform(
                typeText("John"), closeSoftKeyboard());
SystemClock.sleep(5000);
onView(withId(R.id.last_name)).perform(typeText("Smith"));
Run Code Online (Sandbox Code Playgroud)

我从这里尝试了答案 Android:java.lang.SecurityException:注入到另一个应用程序需要INJECT_EVENTS权限 ,但没有帮助。

这是我使用的Expresso版本:

// Android Test Support Libraries
    espressoRunnerVersion = "0.5"
    espressoRulesVersion = "0.5"
    espressoVersion = "2.2.2"
Run Code Online (Sandbox Code Playgroud)

这是完整的堆栈跟踪:

android.support.test.espresso.PerformException: Error performing 'type text(Smith)' on view 'with id: church.life.app:id/last_name'.
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:84)
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:81)
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:52)
at android.support.test.espresso.ViewInteraction.waitForAndHandleInteractionResults(ViewInteraction.java:312)
at android.support.test.espresso.ViewInteraction.desugaredPerform(ViewInteraction.java:167)
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:110)
at church.life.app.ui.profile.ProfileSignupTest.InvalidSignupTest(ProfileSignupTest.java:44)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) …
Run Code Online (Sandbox Code Playgroud)

android unit-testing android-espresso

1
推荐指数
1
解决办法
392
查看次数

测试列表首选项

我正在尝试测试android偏好设置,而我对如何实现该结果感到有些困惑。

这是我的偏爱

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
    android:id="@+id/numberListPreference"
    android:defaultValue="3"
    android:entries="@array/number_text"
    android:entryValues="@array/number_value"
    android:key="@string/pref_key"
    android:summary="@string/pref_summary"
    android:title="@string/pref_title" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)

我想测试一下,当我更改显示的ListPreference中的数字时,实际上已更改了SharedPreference。

现在,代码可以正常工作了,我只是阻塞了测试部分。

这是我活动的一部分:

public class SettingActivity extends AppCompatActivity implements
SharedPreferences.OnSharedPreferenceChangeListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager()
            .beginTransaction()
            .replace(android.R.id.content, new SettingsFragment())
            .commit();
    }

    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我遇到经典的“如果目标视图不属于视图层次结构”错误。

欢迎任何帮助。谢谢 !

android android-testing android-espresso

1
推荐指数
1
解决办法
164
查看次数