Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Android Espresso WebView webClick()和webKeys()不会在输入字段上触发模糊事件_Javascript_Android_Android Webview_Android Espresso_Blur - Fatal编程技术网

Javascript Android Espresso WebView webClick()和webKeys()不会在输入字段上触发模糊事件

Javascript Android Espresso WebView webClick()和webKeys()不会在输入字段上触发模糊事件,javascript,android,android-webview,android-espresso,blur,Javascript,Android,Android Webview,Android Espresso,Blur,我正在尝试使用浓缩咖啡测试网络视图。WebView包含一些输入字段和一个按钮以继续下一页。我能够在输入字段中输入文本。离开输入字段后,应调用一个模糊事件,该事件执行一些额外的格式化和验证。但是,模糊事件从未被调用,因此我无法继续下一页 它看起来只是注入了一些文本,并简单地触发了一个点击事件。这可能就是为什么焦点永远不会改变,模糊事件永远不会被调用。当我亲自按下输入字段时,事件确实会被触发,并且我还看到了Android输入光标。当测试用例运行时,在输入字段中输入文本时,我看不到光标 有没有办法通过

我正在尝试使用浓缩咖啡测试网络视图。WebView包含一些输入字段和一个按钮以继续下一页。我能够在输入字段中输入文本。离开输入字段后,应调用一个模糊事件,该事件执行一些额外的格式化和验证。但是,模糊事件从未被调用,因此我无法继续下一页

它看起来只是注入了一些文本,并简单地触发了一个点击事件。这可能就是为什么焦点永远不会改变,模糊事件永远不会被调用。当我亲自按下输入字段时,事件确实会被触发,并且我还看到了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));
}
编辑:添加了相关依赖项

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
    webKeys
    等)正在检查项目的实际可见性。每次都应该使用一些原始atom,或者至少匹配可见性
  • 只能在用户空间Javascript中执行可能的操作。存在一些限制。比如现在的问题。在具有复杂WebVIEW的项目中,您应该考虑使用UiAutoCAD或某些实现的SE(使用ChrimEdvor)。Espresso web并不是“真正的用户所希望的”。这仅仅通过javascript注入是无法实现的。Chromedriver在用户般的演技方面非常强大
  • 我的回答不是泛泛的。有时您不需要在输入上设置聚焦/模糊。例如,有时您希望发送
    更改
    事件,该事件也不会由
    webKeys
    触发

看看这个:@RahulKhurana不确定这会有什么帮助,因为我没有得到问题中提到的错误。我也不是在模拟器上测试。但是我更新了我的问题并添加了相关的依赖项。你发现了什么解决tiggering事件的方法?我试图在
输入上触发
onChange