【问题标题】:Can ADB see if the browser is fully loaded?亚行可以查看浏览器是否已满载?
【发布时间】:2011-11-16 20:40:54
【问题描述】:

我创建了一个应用程序,它通过 ADB 与 Android Emulator 交互,以将浏览器发送到特定 URL,然后截取浏览器窗口。然后我抓取图像并将其在服务器端转换为 JPG。

一切都很好,但是现在我只是在执行 thread.sleep() 15 秒以确保浏览器完成加载我传入的 URL。嗯,这在大多数情况下都可以正常工作,但有些网站加载方式在 15 秒之前完成,而其他方式仍然需要几秒钟。

我想知道是否有一种方法可以通过 ADB 来检查浏览器是否已完成加载,而不是设置静态等待时间?

【问题讨论】:

  • 只是为了更新,我无法通过 adb 找到可靠的方法,因此我检查了屏幕截图中的 3 个像素以确定其 RGB 颜色。如果它们与加载条的颜色模式相匹配,我会稍等片刻,然后再拍摄一张屏幕截图,直到加载条消失或发生超时。不是我最喜欢的解决方案,但我需要在星期五的最后期限之前完成!

标签: android android-emulator adb


【解决方案1】:

有一种方法:在打开浏览器后,加载一个javascript url,一旦页面加载,就会输出到控制台。然后在 logcat 中查找输出。 在 android 中,所有console.log() javascript 调用都被转发到 logcat。 (标签名称取决于操作系统版本,查找控制台、浏览器或 WebCore)

示例:

adb shell am start -a android.intent.action.VIEW -d http://www.stackoverflow.com ; sleep 1 ; adb shell am start -a android.intent.action.VIEW -d "javascript:window.onload=function(){console.log('stackoverflow rocks hard.')}" -n com.android.browser/com.android.browser.BrowserActivity

当网站完全加载时,您可以在 logcat 上看到以下行:

11-16 23:03:53.887: D/WebCore(1672): Console: stackoverflow%20rocks%20hard. line: 1 source: 

【讨论】:

  • 谢谢,我 90% 都在使用您的建议。我可以按照您的建议使用 javascript URL 传递一个唯一 ID,以便可以记录它...然后我执行 logcat 来获取日志并阅读以查看我的 ID 是否在其中。我的问题是即使在加载窗口之前,javascript 的 onload 也会触发。我正在发出页面的第一次加载,然后在另一个进程中将 javascript URL 扔给浏览器(延迟 2 秒后),但似乎 javascript 甚至在页面加载之前就写入控制台。您知道为什么会发生这种情况吗?
  • 我使用了相同的代码,但我使用的是 C# 并使用 Process.Start() 来发送命令。我发送第一个命令,它设置 URL,然后我在 2 秒后使用 js 发送第二个命令。是的,代码是相同的,只是没有放置“堆栈溢出很难”,而是放置了一个唯一键,这样我就可以通过 logcat 获取日志的内容以查看 ID 是否在其中。问题是,即使页面仍在加载,ID 也在日志中,因此我的屏幕截图方法过早执行。
  • 我不明白为什么它不适合你。在我的 2.3.4 安卓手机上,我可以清楚地看到它在工作。如果我在页面加载后触发第二个代码,如果我在加载完成之前触发它没有日志,我可以在加载完成后看到日志行。在电话上,您是否看到打开了一个新窗口,或者第一个呼叫显示的窗口是否被第二个呼叫重复使用?
  • 不,没有新窗口打开,它重复使用同一个窗口。我认为这应该是正确的?顺便说一句,我正在运行 2.3.3,但我怀疑这将是一个问题。
  • 是的,必须使用相同的窗口。 2.3.3 或 2.3.4 应该不是问题。也许这是 adb 实现的不同?我在 Mac 上,adb 版本 1.0.29,SDK 15。你的 sdk 版本是多少?您可以尝试用 document.onload 或 document.body.onload 替换 window.onload 吗?您可以在执行 adb 调用的地方发布您的代码 c# 代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多