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