3

J'ai une application Android qui utilise ViewPager et chaque fragment dans le pager de vue a son propre WebView. Je suis en mesure d'écrire un cas de test pour vérifier la navigation sur le ViewPager. Mais comment puis-je tester si la div dans le webview qui est le premier enfant du pager de la vue affirme la chaîne fournie?Test expresso sur Webview dans ViewPager

onWebView().withElement(findElement(Locator.ID, "desgination")). 
       check(webMatches(getText(), containsString("Doctor"))); 

Celui-ci jette

android.support.test.espresso.AmbiguousViewMatcherException: 'WebView avec JS activé la fonction' correspond à plusieurs points de vue dans la hiérarchie. Problème Les vues sont marquées d'un '**** MATCHES ****' ci-dessous.

Répondre

3

Changer votre code

onWebView(Matchers.allOf(isDisplayed(), isJavascriptEnabled())) 
    .withElement(findElement(Locator.ID, "desgination")) 
    .check(webMatches(getText(), containsString("Doctor"))); 

La méthode isDisplayed() est nécessaire pour sélectionner automatiquement celui qui est actuellement à l'écran.

0

Dans mon cas, j'avais plusieurs fragments avec WebViews imbriqués. J'utilisais add/show/hide avec le fragmentManager. Cela signifie que isDisplayed() a renvoyé plusieurs correspondances. En fin de compte j'attribué une contentDescription unique à chaque WebView:

webView.setContentDescription("webView[0]"); 

et situé à la webView spécifique avec Espresso avec:

onWebView(withContentDescription("webView[0]")) 
    .withElement(findElement(Locator.ID, "submit")) 
    .perform(webClick()); 

Edit: Après avoir lu un peu plus sur l'contentDescription il est devenu clair que cette est une mauvaise utilisation de la variable membre qui est destinée à l'accessibilité. docs