当前位置: 首页 > 知识库问答 >
问题:

无法检查Android应用程序的webview元素

杜凯
2023-03-14

我有一个android应用程序,它打开一个webview进行登录。我需要为用户名和密码插入文本,但appium无法在webview上找到元素。Appium inspector也无法检查屏幕上的元素。这是android webview的问题吗?

Xpath正在显示:/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.webkit.WebView

共有2个答案

凌琦
2023-03-14

在尝试寻找WebView中的元素时,您需要首先将上下文切换到WebView中。请参阅官方留档自动化混合应用。

以下是如何从上述文档中输入WebView的步骤:

以下是在Appium测试中与web视图对话所需的步骤:

>

  • 导航到应用程序中web视图处于活动状态的部分

    检索当前可用的上下文。它返回我们可以访问的上下文列表,如NATIVE_APP或WEBVIEW_1

    使用要访问的上下文的id设置上下文。这将使您的Appium会话进入一种模式,其中所有命令都被解释为用于自动执行web视图,而不是应用程序的本机部分。例如,如果运行getElementByTagName,它将在web视图的DOM上操作,而不是返回本机元素。当然,某些WebDriver方法仅在一个或另一个上下文中有意义,因此在错误的上下文中,您将收到错误消息。

    若要停止在Web视图上下文中进行自动化,并返回到自动化应用程序的本机部分,只需使用本机上下文id(通常为NATIVE_APP)再次设置上下文,以离开Web上下文并再次访问本机命令。

  • 危寒
    2023-03-14

    Android布局由ViewGroups和Views组成,而WebView是一个视图,具有自己的内容,不能有孩子般的ViewGroups。呈现站点上的文本字段不是AndroidsEditTexts,它们只是由Chromium引擎呈现和处理。e、 g.它们有自己的默认样式,可以通过CSS进行样式设置,但对于舒尔来说,当您为它们“全局”设置某些样式时,它们的样式将不会与您的EditTexts相同

    WebView有点像VideoView-是的,你可以播放一段视频,其中只包含屏幕中间的文本,但这不会使VideoView的行为像TextView。例如,您不能更改文本颜色或选择部分文本进行复制。整个内容由另一种机制呈现(这两种情况下都是巨大而复杂的,在后台工作,可能运行新线程,甚至可能运行进程),就像Chromium呈现网站一样。

    您仍然可以尝试使用JS访问web内容文本字段,使用smth,如下所示

    webView.loadUrl("javascript:document.getElementByName('id_of_field').value = 'inserted text';");
    

    首先不要忘记启用JS

    webView.getSettings().setJavaScriptEnabled(true);
    

    另外,在开发者选项中启用“显示布局边界”,并检查应用程序的外观(或任何其他,甚至系统本身)以及web内容的外观(在WebView或任何浏览器应用程序中)

     类似资料:
    • > 启动appium服务器后,该应用程序安装在ios模拟器中。 当我尝试使用appium inspector进行检查时,appium inspector中的刷新按钮一直在加载,它根本不会加载应用程序的主页。

    • 问题内容: 我的Android应用程序中有一个webview,但是当有人在站点中导航时,它会在新窗口中打开,我希望它停留在webview中。是否可以轻松地做到这一点?这是我活动中的代码: 问题答案: 您必须创建一个: 然后将其设置为如下所示:

    • 我正在检查一个屏幕上iOS应用程序,但它不提供该屏幕上的任何元素。 Appium inspector未在该屏幕上提供任何对象。请帮忙。我被困在这里了。如果有其他方法检查iOS屏幕,请建议。 我正在mac中使用Appium Desktop v1.9.0 https://i.stack.imgur.com/HZVkf.png

    • 我无法通过Android Studio或手动复制APK在我的联想Phab PLUS(联想PB-1 770M,Android 5.1.1 API 22)上安装我的应用程序。 通过Android Studio:我得到错误失败安装APK[INSTALL_FAILED_DEXOPT]。它提示我,手机上可能有一个现有的应用程序,带有相同的过时的德克斯罐包,并提示我卸载现有的应用程序。然而,当我继续"是",它

    • 在gradle attemp构建项目后有一个日志(使用Pro buf) :app:GeneratedBugProto失败 失败:生成失败,出现异常。 > 错误:任务“:app:generateDebugProto”的执行失败。 协议:标准输出:。stderr:/Users//app/build/extracted protos/main:警告:目录不存在/用户//app/src/debug/pro