Il existe une classe auxiliaire DialogIdlingResource, dans laquelle j'essaie d'exécuter mes tests. Les tests ont lieu, sauf celui-ci. Après avoir appuyé sur le bouton, tout s'arrête.Délai d'expiration dans les tests d'expresso, le test ne fonctionne pas
AcceptanceHelper.clickOnButtonInLayout(R.id.mainSignButton, R.string.common_signin_button_text, R.id.inputLayout)
Extrait de code avec deux méthodes d'assistance:
@Test
fun signInUserWithInvalidEmail() {
goToSignIn()
AcceptanceHelper.updateValidationTextView(R.string.ui_data_attribute_email, "[email protected]")
AcceptanceHelper.updateValidationTextView(R.string.ui_data_attribute_password, VALID_PASSWORD)
AcceptanceHelper.clickOnButtonInLayout(R.id.mainSignButton, R.string.common_signin_button_text, R.id.inputLayout)
val idlingResource = DialogIdlingResource()
registerDialogIdlingResource()
unregisterDialogIdlingResource()
}
private fun registerDialogIdlingResource() {
val instrumentation = InstrumentationRegistry.getInstrumentation()
idlingResource = DialogIdlingResource()
Espresso.registerIdlingResources(idlingResource)
}
private fun unregisterDialogIdlingResource() {
Espresso.unregisterIdlingResources(idlingResource)
}
probable que l'erreur due aux deux méthodes de regester désinscriptions (idlingResource)
Mais en fait, il devrait fonctionner, mais peut quelque part que probablement fait une erreur, un code de classe auxiliaire:
class DialogIdlingResource(private val waitTimeSeconds: Int = 5) :
IdlingResource {
private var resourceCallback: IdlingResource.ResourceCallback? = null
private var startTime = -1L
override fun getName(): String {
return DialogIdlingResource::class.java.name
}
override fun isIdleNow(): Boolean {
if (startTime < 0) {
startTime = System.currentTimeMillis()
}
val timeOut = System.currentTimeMillis() - waitTimeSeconds * 1000 > startTime
if (timeOut)
throw TimeoutException("error")
val idle = !isDialogRunning
if (idle && resourceCallback != null) {
resourceCallback!!.onTransitionToIdle()
}
return idle
}
override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
this.resourceCallback = resourceCallback
}
private val isDialogRunning: Boolean
get() {
try {
onView(Matchers.allOf(withId(R.id.titleTextView), ViewMatchers.withText("Warning")))
.check(ViewAssertions.matches(isDisplayed()))
} catch (e: NoMatchingViewException) {
e.printStackTrace()
System.out.println("some text")
}
return true
}
AUSSI essayer de résoudre le problème avec solution suivant. Et quand je cours juste un de mes tests, tout fonctionne bien. Mais si je commence tous mes tests, j'attrape l'erreur. Beacause test n'a pas le temps de vérifier par exemple le texte dans mon dialogue, il a ouvert le dialogue et c'est tout.
classe IdlingResource:
class ElapsedTimeIdlingResource(private val activity: SignActivity?) : IdlingResource {
private var callback: IdlingResource.ResourceCallback? = null
override fun getName(): String {
return "SignInScreenTest"
}
override fun isIdleNow(): Boolean {
val idle = isIdle
if (idle) callback!!.onTransitionToIdle()
return idle
}
val isIdle: Boolean
get() = activity != null && callback != null
override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
this.callback = resourceCallback
}
}
dans mon test
val activity = mActivityTestRule.getActivity()
val idlingResource = ElapsedTimeIdlingResource(activity)
Espresso.registerIdlingResources(idlingResource)
AcceptanceHelper.checkTextView(R.id.titleTextView, "Warning")
Et je le répète, juste au moment où je commence tous mes tests, je dois mettre le sommeil entre registerIdlingResources et checktextView quelque chose comme ceci:
SystemClock.sleep(5000)
S'il vous plaît aider à résoudre ce problème. Et désolé pour mon anglais.
'java.lang.NullPointerException: Tentative d'invoquer la méthode virtuelle 'int android.view.View.getId()' sur un reference' objet nul quand je résous quelque chose comme ceci' val idlingResource = ViewVisibilityIdlingResource (mActivityTestRule.activity.findViewById (R.id.titleTextView), 2000) ' – Inkognito
La vue que vous recherchez appartient probablement à une autre activité que' mActivityTestRule.activity'. Vous devriez obtenir la dernière activité affichée sur l'écran. Voir ce lien - http://qathread.blogspot.ch/2014/09/discovering-espresso-for-android-how-to.html – denys