Tuesday, 23 February 2021

How to use webkeys() to insert text in a webview and trigger onChange event with Espresso

I have a webview containing an input field and a button below it (webview is 3rd party code) When I open the view on my phone, as soon as I insert a digit into the field, the button changes color and is enabled.

When I run my test I can put text into the field but the button is not enabled

 onWebView().withElement(findElement(Locator.ID, "input"))
            .perform(clearElement())
            .perform(DriverAtoms.webKeys("22222222"))
            .perform(webClick())
            .withElement(findElement(Locator.ID, "continueButton"))
            .perform(webClick());

Firefox inspector shows there is an event listener for the onChange event whose listener I suppose is this one:

            function(e) {
          e.persist();
          var t = /^[0-9\b]+$/;
          d((function(a) {
            return Object(c.a)(Object(c.a)({}, a), {}, Object(M.a)({}, e.target.name, t.test(e.target.value) ? e.target.value : e.target.value.replace(/[^0-9]/g, "")))
          })), e.target.value.replace(/[^0-9]/g, "").length > 0 ? (j(!1), b("primary"), k(""), R("")) : (b("primary disabled"), k("hidden"), R("paddingTop20"))
        }

So I tried triggering the onchange with no luck:

   onWebView().forceJavascriptEnabled().withElement(findElement(Locator.ID,    "input"))
            .perform(clearElement())
            .perform(webClick())
            .perform(DriverAtoms.webKeys("22222222"))
            .perform(webClick())
            .perform(SimpleAtom("function(elem) {\n" +
                    "var e = document.createEvent('Event');\n" +
                    "e.initEvent('change', false, true);\n" +
                    "elem.dispatchEvent(e);}"))
            .perform(webClick())
            .withElement(findElement(Locator.ID, "continueButton"))
            .perform(webClick());

How can I trigger the onChange event (or whatever event is needed) and perform the webclick() with Espresso?



from How to use webkeys() to insert text in a webview and trigger onChange event with Espresso

No comments:

Post a Comment