【问题标题】:Not able to inspect element from android application's webview无法从 android 应用程序的 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

【问题讨论】:

  • 您好,您可以通过添加相关代码和输出来改进您的问题

标签: android appium


【解决方案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 或任何浏览器应用内)

【讨论】:

【解决方案2】:

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

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

进入网络视图上下文

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 2018-02-19
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2018-08-19
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多