【发布时间】:2021-02-19 21:35:34
【问题描述】:
我有一个包含输入字段和下方按钮的 webview(webview 是第 3 方代码) 当我在手机上打开视图时,只要我在字段中插入一个数字, 按钮改变颜色并启用。
输入字段是
<input type="tel" name="input" id="input" class="inputbox" autocomplete="off" placeholder="number" value="">
当我使用 Espresso 运行自动测试时,我可以将文本放入字段中,但按钮未启用
onWebView().withElement(findElement(Locator.ID, "input"))
.perform(clearElement())
.perform(DriverAtoms.webKeys("22222222"))
.perform(webClick())
.withElement(findElement(Locator.ID, "continueButton"))
.perform(webClick());
Firefox 检查器显示 onChange 事件有一个事件侦听器,我想它的侦听器是这个:
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"))
}
所以我尝试触发 onchange 没有运气:
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());
如果我使用键盘插入数字 continueButton 启用,我可以单击它并继续输入文本,但使用 webkeys() 不起作用。 如何触发类似于使用键盘的 onChange 事件(或任何需要的事件)并使用 Espresso 执行 webclick()?
【问题讨论】:
-
你能显示表单的 HTML 吗?
-
@ElJackiste 嗨,这是表单 (我不能粘贴整个页面 b/c 这不是我们的代码)
-
您说您可以使用 espresso 将文本放入字段中。在您的示例中,表单的 ID 与您的测试不匹配,您输入了
input,但您的 ID 是name。另外,你为什么在webKeys("222");之后执行webClick()?您是否尝试在webKeys("222");之后让它等待/休眠? -
@ElJackiste 抱歉不够精确,我修改了名称 b/c 他们有一个与代码创建者相关的名称。我将修改我的第一篇文章,以更清晰的方式添加信息。我尝试了 webclick() 和 clear() 的不同组合,看看是否有区别,但没有帮助。唯一有效的是: document.getElementById('continueButton').className='button primary' 就是这样。更改 continueButton 的类型以使其启用,但这只是一个视觉技巧,就像表单看不到我输入的数字,除非我使用键盘
-
好的,我没有android环境,无法重现您的问题。如果我发现了什么,我会告诉你的。
标签: javascript android android-espresso android-testing