Wir*_*ing 6 javascript android blur android-webview android-espresso
我正在尝试使用 Espresso 测试 WebView。WebView 包含一些输入字段和一个继续下一页的按钮。我可以在输入字段中输入文本。离开输入字段后,应该调用一个模糊事件来执行一些额外的格式化和验证。然而,模糊事件永远不会被调用,因此我无法继续下一页。
看起来webKeys()只是注入一些文本,而webClick()只是触发点击事件。这可能就是为什么焦点永远不会改变并且模糊事件永远不会被调用的原因。当我亲自按下输入字段时,事件确实被触发,并且我还看到了 Android 输入光标。当测试用例运行时,在输入字段中输入文本时我看不到光标。
有没有办法以编程方式触发模糊事件或使用 Espresso 将焦点设置到 WebView 中的元素?
这是我用来插入文本的代码。
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));
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加了相关依赖项。
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"
Run Code Online (Sandbox Code Playgroud)
您可以将任何 javascript 发送到您的 Web 视图。
每个“原子”(webKeys原子之一)只是一些 javascript 代码,它会发送到您的 Web 视图。webKeysatom 可能会发送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);}"
))
Run Code Online (Sandbox Code Playgroud)
这应该将焦点设置到给定元素。您正在发送函数,然后使用您的元素作为第一个参数来调用该函数。
您应该创建一些类似SetFocusAtom或RemoveFocusAtom等的类,这些类将扩展SimpleAtom而不是到处复制和粘贴整个 javascript。
意识到:
webClick等webKeys)正在检查项目的实际可见性。您应该每次都使用一些原始原子或至少匹配可见性。focus/blur输入。例如,有时您想发送change事件,这也不是由 触发的webKeys。| 归档时间: |
|
| 查看次数: |
1925 次 |
| 最近记录: |