1cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2014 The Chromium Authors. All rights reserved.
2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be
3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file.
4cef7893435aa41160dd1255c43cb8498279738ccChris Craik
5cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport logging
6cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport time
7cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport unittest
8cef7893435aa41160dd1255c43cb8498279738ccChris Craik
9cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.core import platform as platform_module
10cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.internal.app import android_app
11cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.internal.backends import android_app_backend
12cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.internal.platform import android_device
13cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.testing import options_for_unittests
14cef7893435aa41160dd1255c43cb8498279738ccChris Craik
15cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom devil.android.sdk import intent
16cef7893435aa41160dd1255c43cb8498279738ccChris Craik
17cef7893435aa41160dd1255c43cb8498279738ccChris Craik
18cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass AndroidAppTest(unittest.TestCase):
19cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def setUp(self):
20cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self._options = options_for_unittests.GetCopy()
21cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self._device = android_device.GetDevice(self._options)
22cef7893435aa41160dd1255c43cb8498279738ccChris Craik
23cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def CreateAndroidApp(self, start_intent):
24cef7893435aa41160dd1255c43cb8498279738ccChris Craik    platform = platform_module.GetPlatformForDevice(self._device, self._options)
25cef7893435aa41160dd1255c43cb8498279738ccChris Craik    platform_backend = platform._platform_backend
26cef7893435aa41160dd1255c43cb8498279738ccChris Craik    app_backend = android_app_backend.AndroidAppBackend(
27cef7893435aa41160dd1255c43cb8498279738ccChris Craik        platform_backend, start_intent)
28cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return android_app.AndroidApp(app_backend, platform_backend)
29cef7893435aa41160dd1255c43cb8498279738ccChris Craik
30cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def testWebView(self):
31cef7893435aa41160dd1255c43cb8498279738ccChris Craik    if self._device is None:
32cef7893435aa41160dd1255c43cb8498279738ccChris Craik      logging.warning('No device found, skipping test.')
33cef7893435aa41160dd1255c43cb8498279738ccChris Craik      return
34cef7893435aa41160dd1255c43cb8498279738ccChris Craik
35cef7893435aa41160dd1255c43cb8498279738ccChris Craik    start_intent = intent.Intent(
36cef7893435aa41160dd1255c43cb8498279738ccChris Craik        package='com.google.android.googlequicksearchbox',
37cef7893435aa41160dd1255c43cb8498279738ccChris Craik        activity='.SearchActivity',
38cef7893435aa41160dd1255c43cb8498279738ccChris Craik        action='com.google.android.googlequicksearchbox.GOOGLE_SEARCH',
39cef7893435aa41160dd1255c43cb8498279738ccChris Craik        data=None,
40cef7893435aa41160dd1255c43cb8498279738ccChris Craik        extras={'query': 'google'},
41cef7893435aa41160dd1255c43cb8498279738ccChris Craik        category=None)
42cef7893435aa41160dd1255c43cb8498279738ccChris Craik    search_app = self.CreateAndroidApp(start_intent)
43cef7893435aa41160dd1255c43cb8498279738ccChris Craik    search_process = search_app.GetProcess(':search')
44cef7893435aa41160dd1255c43cb8498279738ccChris Craik    search_process._UpdateDevToolsClient()
45cef7893435aa41160dd1255c43cb8498279738ccChris Craik
46cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # TODO(ariblue): Replace the app used in this test with one in which the
47cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # setWebContentsDebuggingEnabled method is called on the WebView class.
48cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # This will configure webviews for debugging with chrome devtools inspector
49cef7893435aa41160dd1255c43cb8498279738ccChris Craik    # and allow us to remove this check.
50cef7893435aa41160dd1255c43cb8498279738ccChris Craik    if search_process._devtools_client is None:
51cef7893435aa41160dd1255c43cb8498279738ccChris Craik      return
52cef7893435aa41160dd1255c43cb8498279738ccChris Craik
53cef7893435aa41160dd1255c43cb8498279738ccChris Craik    webview = search_app.GetProcess(':search').GetWebViews().pop()
54cef7893435aa41160dd1255c43cb8498279738ccChris Craik    webview.Navigate('https://www.google.com/search?q=flowers')
55cef7893435aa41160dd1255c43cb8498279738ccChris Craik    time.sleep(5)
56