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

Posted

技术标签:

【中文标题】无法从 android 应用程序的 webview 检查元素【英文标题】:Not able to inspect element from android application's webview 【发布时间】:2021-04-13 21:02:36 【问题描述】:

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

Xpath 只是显示:/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.webkit.WebView

【问题讨论】:

您好,您可以通过添加相关代码和输出来改进您的问题 【参考方案1】:

Android 布局是用ViewGroups 和Views 制作的,WebView 是一个有自己的内容的View,不能有像ViewGroups 这样的子代。渲染站点上的文本字段不是 Androids EditTexts,它们只是由 Chromium 引擎渲染和处理。例如它们有自己的默认样式,并且可能由 CSS 设置样式,但是当您 set some style for them "globally" 时,它们的样式不会与您的 EditTexts 相同

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

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

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

一开始别忘了启用JS

webView.getSettings().setJavaScriptEnabled(true);

附言。 Enable "Show layout bounds" in developer options 并检查您的应用(或任何其他应用,甚至系统本身)的外观以及 Web 内容的外观(在 WebView 或任何浏览器应用内)

【讨论】:

他在谈论 Appium 和 Appium Inspector。您的回答似乎是关于 Android 框架的。 Appium 默认只检查原生Views。我做了一些小搜索,看起来有一个possibily for enabling WebView content support【参考方案2】:

在尝试查找其中的元素时,您需要先将上下文切换到 WebView。见官方文档Automating hybrid apps。

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

进入网络视图上下文

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

    导航到您的应用中网络视图处于活动状态的部分

    检索当前可用的上下文。这将返回一个列表 我们可以访问的上下文,例如“NATIVE_APP”或“WEBVIEW_1”

    使用要访问的上下文的 id 设置上下文 This 将您的 Appium 会话置于所有命令都运行的模式 被解释为旨在自动化 Web 视图,而不是 比应用程序的本机部分。例如,如果您运行 getElementByTagName,它将对 web 视图的 DOM 进行操作, 而不是返回原生元素。当然,某些 WebDriver 方法只在一种或另一种情况下才有意义,所以在错误的情况下 您将收到一条错误消息。

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

【讨论】:

以上是关于无法从 android 应用程序的 webview 检查元素的主要内容,如果未能解决你的问题,请参考以下文章

自 Android 11 (SDK30) 以来,我无法将 HTML 文件从应用程序特定存储加载到 WebView

APPIUM ANDROID 混合应用程序:在混合应用程序中从本机导航到 Web 视图时,无法将驱动程序上下文获取为“WEBVIEW”

无法在 webview 中使用 appium android 定位混合应用程序的 webelements

Android Chrome Webview 无法访问 Google Pay

Android:无法从 WebView 打印/PDF html 文档(版本:86.0.4240.75)

当我从 setWebChromeClient 使用时,我无法从 onPageStarted webView 使用 - Android