एस्प्रेसो वेब

एस्प्रेसो-वेब, Android वेबव्यू के यूज़र इंटरफ़ेस (यूआई) के कॉम्पोनेंट के साथ काम करने का एक एंट्री पॉइंट है. एस्प्रेसो-वेब, वेबव्यू के व्यवहार की जांच करने और उसे कंट्रोल करने के लिए, लोकप्रिय WebDriver API में मौजूद ऐटम का फिर से इस्तेमाल करता है.

एस्प्रेसो वेब का इस्तेमाल कब करें

अपने हाइब्रिड ऐप्लिकेशन की जांच करने के लिए, Espresso-Web का इस्तेमाल करें. खास तौर पर, WebView के साथ ऐप्लिकेशन के नेटिव यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट यूज़र इंटरफ़ेस (यूआई) के कॉम्पोनेंट. एस्प्रेसो वेब एपीआई को अन्य WebView ऑब्जेक्ट में वेब एलिमेंट के साथ पूरी तरह से इंटरैक्ट करने के लिए, Espresso एपीआई.

अगर आपको सिर्फ़ WebView की जांच करनी है, न कि आपके ऐप्लिकेशन में WebView और नेटिव कॉम्पोनेंट के बीच होने वाले इंटरैक्शन पर विचार करें WebDriver जैसे फ़्रेमवर्क का इस्तेमाल करके, सामान्य वेब टेस्ट लिखना. अगर किसी वेब टेस्टिंग फ़्रेमवर्क का इस्तेमाल किया जाता है, तो आपको आपको किसी Android डिवाइस या Java वर्चुअल मशीन का इस्तेमाल करना होगा जिससे आपकी जांच तेज़ी से और भरोसेमंद तरीके से चलाया जा सकता है. इसके बाद, Espresso-Web आपको अपनी वेबसाइट पर आपके कस्टम WebDriver ऐटम इस्तेमाल करें. इनसे आपको बहुत ज़्यादा सहूलियत मिलती है, ख़ास तौर पर जब आप ऐसे टेस्ट लिखते हैं जिन्हें स्टैंडअलोन वेब ऐप्लिकेशन और ऐसे ऐप्लिकेशन जिनमें Android यूज़र इंटरफ़ेस (यूआई) शामिल है.

यह कैसे काम करता है

Espresso के onData() में भी बताया गया है तरीके का इस्तेमाल करते हैं, तो WebView इंटरैक्शन में कई Atoms शामिल होते हैं. WebView के इंटरैक्शन में, Java प्रोग्रामिंग भाषा और JavaScript ब्रिज को ध्यान में रखकर काम किया. ऐसा इसलिए, क्योंकि शुरुआती तौर पर कॉन्टेंट, दर्शकों के लिए JavaScript एनवायरमेंट से डेटा दिखाकर शर्तों को पूरा करते हैं, जैसे कि सब कुछ Java पर आधारित होने पर, Espresso एक अलग कॉपी है. यह इस तरह से डेटा दिखाता है: Web.WebInteraction ऑब्जेक्ट पूरी तरह से काम करता है. इसकी मदद से, दिए गए डेटा की पुष्टि की जा सकती है अनुरोध.

WebDriver ऐटम क्या है?

WebDriver फ़्रेमवर्क, वेब एलिमेंट को ढूंढने और उनमें बदलाव करने के लिए ऐटम का इस्तेमाल करता है प्रोग्रामेटिक रूप से. WebDriver, ब्राउज़र में बदलाव करने के लिए ऐटम का इस्तेमाल करता है. अगर आप ऐटम सैद्धांतिक तौर पर ViewAction, पूरी जानकारी यूनिट है जो आपके यूज़र इंटरफ़ेस (यूआई) में कोई कार्रवाई करती है. इसकी सूची का इस्तेमाल करके Atoms को दिखाया जाता है तय की गई विधियां, जैसे कि findElement() और getElement() का इस्तेमाल करके उपयोगकर्ता के नज़रिए से ब्राउज़र बनाते हैं. हालांकि, अगर WebDriver का इस्तेमाल किया जाता है, तो इसलिए, ऐटम सही तरीके से व्यवस्थित होने चाहिए. इसके लिए ऐसे तर्क की ज़रूरत होती है काफ़ी ज़्यादा शब्दों में जानकारी दी जाती है.

Espresso में, Web क्लास और Web.WebInteraction इस बॉयलरप्लेट को रैप करें और वेबव्यू के साथ इंटरैक्ट करते हुए एस्प्रेसो-जैसी अनुभव दें ऑब्जेक्ट हैं. WebView के कॉन्टेक्स्ट में, ऐटम का इस्तेमाल इस तरह किया जाता है यह पारंपरिक एस्प्रेसो ViewMatchers और ViewActions के बदले में लिया जाता है.

फिर API काफ़ी आसान लगता है:

Kotlin

onWebView()
    .withElement(Atom)
    .perform(Atom)
    .check(WebAssertion)

Java

onWebView()
    .withElement(Atom)
    .perform(Atom)
    .check(WebAssertion);

ज़्यादा जानने के लिए, Atoms के बारे में Celenium के दस्तावेज़ पढ़ें.

वेबव्यू लागू करें

अगर आपको इनके साथ काम करना है, तो नीचे दिए गए दिशा-निर्देशों का पालन करें WebView की जांच की है.

पैकेज

अपने प्रोजेक्ट में Espresso-Web को शामिल करने के लिए, नीचे दिए गए चरण पूरे करें:

  1. अपने ऐप्लिकेशन की build.gradle फ़ाइल खोलें. आम तौर पर, ऐसा नहीं होता है टॉप लेवल build.gradle फ़ाइल, लेकिन app/build.gradle.
  2. डिपेंडेंसी के अंदर नीचे दी गई लाइन जोड़ें:

    ग्रूवी

        androidTestImplementation 'androidx.test.espresso:espresso-web:3.6.1'
        

    Kotlin

        androidTestImplementation('androidx.test.espresso:espresso-web:3.6.1')
        
  3. Espresso-Web सिर्फ़ Espresso 2.2 या उसके बाद के वर्शन के साथ काम करता है. वर्शन 0.3 या उसके बाद वाले वर्शन का इस्तेमाल करने की अनुमति देते हैं, इसलिए उन्हें अपडेट करना न भूलें पंक्तियों में भी:

    ग्रूवी

        androidTestImplementation 'androidx.test:runner:1.6.1'
        androidTestImplementation 'androidx.test:rules:1.6.1'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
        

    Kotlin

        androidTestImplementation('androidx.test:runner:1.6.1')
        androidTestImplementation('androidx.test:rules:1.6.1')
        androidTestImplementation('androidx.test.espresso:espresso-core:3.6.1')
        

एपीआई का सामान्य इस्तेमाल

onWebView() Android पर वेबव्यू के साथ काम करते समय, यह तरीका मुख्य एंट्री पॉइंट होता है एस्प्रेसो (कॉफ़ी) आप इस विधि का उपयोग एस्प्रेसो-वेब परीक्षण करने के लिए करते हैं, जैसे फ़ॉलो किया जा रहा है:

Kotlin

onWebView()
    .withElement(findElement(Locator.ID, "link_2")) // similar to onView(withId(...))
    .perform(webClick()) // Similar to perform(click())

    // Similar to check(matches(...))
    .check(webMatches(getCurrentUrl(), containsString("navigation_2.html")))

Java

onWebView()
    .withElement(findElement(Locator.ID, "link_2")) // similar to onView(withId(...))
    .perform(webClick()) // Similar to perform(click())

    // Similar to check(matches(...))
    .check(webMatches(getCurrentUrl(), containsString("navigation_2.html")));

इस उदाहरण में, Espresso-Web एक ऐसे DOM एलिमेंट का पता लगाता है जिसका आईडी "link_2" और उस पर क्लिक करता है. इसके बाद, टूल यह पुष्टि करता है कि वेबव्यू कोई जीईटी अनुरोध भेजता है या नहीं "navigation_2.html" स्ट्रिंग शामिल है.

JavaScript समर्थन

टेस्ट को एक्ज़ीक्यूट करते समय, सिस्टम इसका इस्तेमाल करके सभी वेबव्यू इंटरैक्शन करता है JavaScript. इसलिए, JavaScript की जांच में मदद करने के लिए, वेबव्यू को टेस्ट किया जा रहा है JavaScript चालू होना चाहिए.

आप कॉल करके JavaScript को ज़बरदस्ती चालू कर सकते हैं forceJavascriptEnabled() के तहत आपकी गतिविधि में की जांच करें, जैसा कि का लिंक दिया गया है.

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @get:Rule val activityScenarioRule =
        activityScenarioRule<MyWebViewActivity>()

    @Test fun testWebViewInteraction() {
        onWebView().forceJavascriptEnabled()
    }
}

सामान्य वेब इंटरैक्शन

Web.WebInteraction ऑब्जेक्ट के साथ आम तौर पर होने वाले इंटरैक्शन में ये शामिल हैं:

  • withElement() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वेबव्यू में डीओएम एलिमेंट का रेफ़रंस दिया जाता है.

    उदाहरण:

    Kotlin

    onWebView().withElement(findElement(Locator.ID, "teacher"))
    

    Java

    onWebView().withElement(findElement(Locator.ID, "teacher"));
    
  • withContextualElement() में स्कोप वाले DOM एलिमेंट का रेफ़रंस दिया गया है WebView के अंदर, किसी दूसरे DOM एलिमेंट के संबंध में. आपको कॉल करना चाहिए पहचान फ़ाइल बनाने के लिए, withElement() सबसे पहले Web.WebInteraction ऑब्जेक्ट (DOM एलिमेंट).

    उदाहरण:

    Kotlin

    .withElement(findElement(Locator.ID, "teacher"))
        .withContextualElement(findElement(Locator.ID, "person_name"))
    

    Java

    .withElement(findElement(Locator.ID, "teacher"))
        .withContextualElement(findElement(Locator.ID, "person_name"));
    
  • check(), स्थिति की जांच करता है और पक्का करता है कि यह ठीक हो जाए true तक.

    उदाहरण:

    Kotlin

    onWebView()
        .withElement(findElement(Locator.ID, "teacher"))
        .withContextualElement(findElement(Locator.ID, "person_name"))
        .check(webMatches(getText(), containsString("Socrates")))
    

    Java

    onWebView()
        .withElement(findElement(Locator.ID, "teacher"))
        .withContextualElement(findElement(Locator.ID, "person_name"))
        .check(webMatches(getText(), containsString("Socrates")));
    
  • perform() वेबव्यू में कोई कार्रवाई लागू करता है, जैसे किसी एलिमेंट पर क्लिक करके.

    उदाहरण:

    Kotlin

    onWebView()
        .withElement(findElement(Locator.ID, "teacher"))
        .perform(webClick())
    

    Java

    onWebView()
        .withElement(findElement(Locator.ID, "teacher"))
        .perform(webClick());
    
  • reset() अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वेबव्यू को उसकी शुरुआती स्थिति पर वापस ला देता है. यह ज़रूरी है, जब कार्रवाई, जैसे कि क्लिक से एक नेविगेशन परिवर्तन हो जाता है, जो ElementReference और WindowReference ऑब्जेक्ट को ऐक्सेस नहीं किया जा सकता.

    ध्यान दें: हालांकि, reset() का इस्तेमाल तब करना चाहिए, जब कई पेज के वर्कफ़्लो के ख़िलाफ़ दावे करना, जैसे कि फ़ॉर्म सबमिट करना, आम तौर पर, आपकी जांच का दायरा सीमित होना चाहिए और एक ही पेज पर फ़ोकस होना चाहिए.

    उदाहरण:

    Kotlin

    onWebView()
        .withElement(...)
        .perform(...)
        .reset()
    

    Java

    onWebView()
        .withElement(...)
        .perform(...)
        .reset();
    

उदाहरण

नीचे दिए गए उदाहरण यह टेस्ट करते हैं कि क्या, वेबव्यू में टेक्स्ट डालने के बाद और सबमिट करें बटन को चुनने पर, वही टेक्स्ट किसी दूसरे एलिमेंट में दिखता है एक ही वेबव्यू:

Kotlin

const val MACCHIATO = "Macchiato"

@RunWith(AndroidJUnit4::class)
class MyEspressoWebTestSuite {

    @Test fun typeTextInInput_clickButton_SubmitsForm() {
        // Create an intent that displays a web form.
        val webFormIntent = Intent()
        // ...

        // Lazily launch the Activity with a custom start Intent per test.
        ActivityScenario.launchActivity(webFormIntent)

        // Selects the WebView in your layout. If you have multiple WebView
        // objects, you can also use a matcher to select a given WebView,
        // onWebView(withId(R.id.web_view)).
        onWebView()
            // Find the input element by ID.
            .withElement(findElement(Locator.ID, "text_input"))

            // Clear previous input and enter new text into the input element.
            .perform(clearElement())
            .perform(DriverAtoms.webKeys(MACCHIATO))

            // Find the "Submit" button and simulate a click using JavaScript.
            .withElement(findElement(Locator.ID, "submitBtn"))
            .perform(webClick())

            // Find the response element by ID, and verify that it contains the
            // entered text.
            .withElement(findElement(Locator.ID, "response"))
            .check(webMatches(getText(), containsString(MACCHIATO)))
    }
}

Java

public static final String MACCHIATO = "Macchiato";

@Test
public void typeTextInInput_clickButton_SubmitsForm() {
    // Create an intent that displays a web form.
    Intent webFormIntent = new Intent();
    // ...

    // Lazily launch the Activity with a custom start Intent per test.
    ActivityScenario.launchActivity(webFormIntent);

    // Selects the WebView in your layout. If you have multiple WebView objects,
    // you can also use a matcher to select a given WebView,
    // onWebView(withId(R.id.web_view)).
    onWebView()
        // Find the input element by ID.
        .withElement(findElement(Locator.ID, "text_input"))

        // Clear previous input and enter new text into the input element.
        .perform(clearElement())
        .perform(DriverAtoms.webKeys(MACCHIATO))

        // Find the "Submit" button and simulate a click using JavaScript.
        .withElement(findElement(Locator.ID, "submitBtn"))
        .perform(webClick())

        // Find the response element by ID, and verify that it contains the
        // entered text.
        .withElement(findElement(Locator.ID, "response"))
        .check(webMatches(getText(), containsString(MACCHIATO)));
}

अन्य संसाधन

Android परीक्षणों में Espresso-Web का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, यह देखें: इन संसाधनों को देखें.

सैंपल

  • WebBasicSample: WebView ऑब्जेक्ट के साथ इंटरैक्ट करने के लिए, Espresso-Web का इस्तेमाल करें.