Javascript Android Espresso WebView webClick()和webKeys()不会在输入字段上触发模糊事件
我正在尝试使用浓缩咖啡测试网络视图。WebView包含一些输入字段和一个按钮以继续下一页。我能够在输入字段中输入文本。离开输入字段后,应调用一个模糊事件,该事件执行一些额外的格式化和验证。但是,模糊事件从未被调用,因此我无法继续下一页 它看起来只是注入了一些文本,并简单地触发了一个点击事件。这可能就是为什么焦点永远不会改变,模糊事件永远不会被调用。当我亲自按下输入字段时,事件确实会被触发,并且我还看到了Android输入光标。当测试用例运行时,在输入字段中输入文本时,我看不到光标 有没有办法通过编程触发模糊事件,或者使用Espresso将焦点设置为WebView中的某个元素 这是我用来插入文本的代码Javascript Android Espresso WebView webClick()和webKeys()不会在输入字段上触发模糊事件,javascript,android,android-webview,android-espresso,blur,Javascript,Android,Android Webview,Android Espresso,Blur,我正在尝试使用浓缩咖啡测试网络视图。WebView包含一些输入字段和一个按钮以继续下一页。我能够在输入字段中输入文本。离开输入字段后,应调用一个模糊事件,该事件执行一些额外的格式化和验证。但是,模糊事件从未被调用,因此我无法继续下一页 它看起来只是注入了一些文本,并简单地触发了一个点击事件。这可能就是为什么焦点永远不会改变,模糊事件永远不会被调用。当我亲自按下输入字段时,事件确实会被触发,并且我还看到了Android输入光标。当测试用例运行时,在输入字段中输入文本时,我看不到光标 有没有办法通过
public static void insertText(String label, String content)
{
onWebView().withElement(findElement(Locator.XPATH, "//div[preceding::span[.='" + label + "']]/input")).perform(clearElement()).perform(webClick())
.perform(webKeys(content));
}
编辑:添加了相关依赖项
implementation "androidx.test.espresso:espresso-idling-resource:3.2.0"
androidTestImplementation "androidx.test.espresso:espresso-core:3.2.0"
androidTestImplementation "androidx.test.espresso:espresso-intents:3.2.0"
androidTestImplementation "androidx.test.espresso:espresso-web:3.2.0"
androidTestImplementation "androidx.test.espresso:espresso-contrib:3.2.0"
您可以向Web视图发送任何javascript 每个“atom”(
webKeys
是atom中的一个)都只是一些javascript代码,发送到Web视图webKeys
atom可能会发送keypress
事件,而不会在浏览器中触发focus/blur/change
事件。这是用户空间代码调度事件的一种标准浏览器行为
由于您可以手动触发按键,也可以触发焦点等。您可以使用以下命令创建和分派焦点:
onWebView().withElement(...)
.perform(SimpleAtom("function(elem) {\n" +
"var e = document.createEvent('Event');\n" +
"e.initEvent('focus', true, true);\n" +
"elem.dispatchEvent(e);}"
))
这应该将焦点设置为给定的元素。您正在发送函数,然后该函数将与您的元素一起作为第一个参数进行开票
您应该创建一些类,如SetFocusAtom
或RemoveFocusAtom
等,这些类将扩展SimpleAtom
,而不是到处复制和粘贴整个javascript
注意:
- 您可以将任何javascript发送到WebView,但您可能不需要。您可以自由编辑当前不可见输入的值等。您正在编写UI测试,因此您只能测试UI的可见部分。原始原子(
,webClick
等)正在检查项目的实际可见性。每次都应该使用一些原始atom,或者至少匹配可见性webKeys
- 只能在用户空间Javascript中执行可能的操作。存在一些限制。比如现在的问题。在具有复杂WebVIEW的项目中,您应该考虑使用UiAutoCAD或某些实现的SE(使用ChrimEdvor)。Espresso web并不是“真正的用户所希望的”。这仅仅通过javascript注入是无法实现的。Chromedriver在用户般的演技方面非常强大
- 我的回答不是泛泛的。有时您不需要在输入上设置聚焦/模糊。例如,有时您希望发送
事件,该事件也不会由更改
触发webKeys
输入上触发onChange