1d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang# Copyright 2015 The Chromium OS Authors. All rights reserved. 2d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang# Use of this source code is governed by a BSD-style license that can be 3d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang# found in the LICENSE file. 4d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 5d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang"""An adapter to remotely access the browser facade on DUT.""" 6d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 7d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 8d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiangclass BrowserFacadeRemoteAdapter(object): 9d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """BrowserFacadeRemoteAdapter is an adapter to remotely control DUT browser. 10d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 11d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang The Autotest host object representing the remote DUT, passed to this 12d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang class on initialization, can be accessed from its _client property. 13d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 14d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """ 15d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang def __init__(self, remote_facade_proxy): 16d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """Construct an BrowserFacadeRemoteAdapter. 17d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 18d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang @param remote_facade_proxy: RemoteFacadeProxy object. 19d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 20d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """ 21d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang self._proxy = remote_facade_proxy 22d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 23d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 24d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang @property 25d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang def _browser_proxy(self): 26d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """Gets the proxy to DUT browser facade. 27d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 28d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang @return XML RPC proxy to DUT browser facade. 29d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 30d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """ 31d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang return self._proxy.browser 32d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 33d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 342ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam def start_custom_chrome(self, kwargs): 352ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam """Start a custom Chrome with given arguments. 362ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam 372ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam @param kwargs: A dict of keyword arguments passed to Chrome. 38dec31fd5a2892dca125b1a7e5911cba24d1678f5Cheng-Yi Chiang @return: True on success, False otherwise. 39dec31fd5a2892dca125b1a7e5911cba24d1678f5Cheng-Yi Chiang 402ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam """ 41dec31fd5a2892dca125b1a7e5911cba24d1678f5Cheng-Yi Chiang return self._browser_proxy.start_custom_chrome(kwargs) 422ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam 432ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam 44eaea996e476b348db3c06b52192504339f2f0e9eCheng-Yi Chiang def start_default_chrome(self, restart=False, extra_browser_args=None): 452ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam """Start the default Chrome. 462ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam 472ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam @param restart: True to start Chrome without clearing previous state. 48eaea996e476b348db3c06b52192504339f2f0e9eCheng-Yi Chiang @param extra_browser_args: A list containing extra browser args passed 49eaea996e476b348db3c06b52192504339f2f0e9eCheng-Yi Chiang to Chrome in addition to default ones. 50dec31fd5a2892dca125b1a7e5911cba24d1678f5Cheng-Yi Chiang @return: True on success, False otherwise. 51dec31fd5a2892dca125b1a7e5911cba24d1678f5Cheng-Yi Chiang 522ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam """ 53eaea996e476b348db3c06b52192504339f2f0e9eCheng-Yi Chiang return self._browser_proxy.start_default_chrome( 54eaea996e476b348db3c06b52192504339f2f0e9eCheng-Yi Chiang restart, extra_browser_args) 552ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam 562ecf0e775e6a19152495003cf90410f53686af30Tom Wai-Hong Tam 57d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang def new_tab(self, url): 58d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """Opens a new tab and loads URL. 59d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 60d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang @param url: The URL to load. 6174ef809f5647db614c5b8215303cc8f2f96c7d8aMoja Hsu @return a str, the tab descriptor of the opened tab. 62d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 63d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """ 6474ef809f5647db614c5b8215303cc8f2f96c7d8aMoja Hsu return self._browser_proxy.new_tab(url) 65d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 66d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 6774ef809f5647db614c5b8215303cc8f2f96c7d8aMoja Hsu def close_tab(self, tab_descriptor): 68d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """Closes a previously opened tab. 69d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 7074ef809f5647db614c5b8215303cc8f2f96c7d8aMoja Hsu @param tab_descriptor: Indicate which tab to be closed. 71d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang 72d0e7fd36b52f7895dea0545a658cd8538c2fbd6aCheng-Yi Chiang """ 7374ef809f5647db614c5b8215303cc8f2f96c7d8aMoja Hsu self._browser_proxy.close_tab(tab_descriptor) 74dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 75dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 76dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com def wait_for_javascript_expression( 77dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com self, tab_descriptor, expression, timeout): 78dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com """Waits for the given JavaScript expression to be True on the given tab 79dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 80dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param tab_descriptor: Indicate on which tab to wait for the expression. 81dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param expression: Indiate for what expression to wait. 82dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param timeout: Indicate the timeout of the expression. 83dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com """ 84dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com self._browser_proxy.wait_for_javascript_expression( 85dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com tab_descriptor, expression, timeout) 86dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 87dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 88dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com def execute_javascript(self, tab_descriptor, statement, timeout): 89dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com """Executes a JavaScript statement on the given tab. 90dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 91dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param tab_descriptor: Indicate on which tab to execute the statement. 92dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param statement: Indiate what statement to execute. 93dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param timeout: Indicate the timeout of the statement. 94dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com """ 95dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com self._browser_proxy.execute_javascript( 96dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com tab_descriptor, statement, timeout) 97dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 98dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 99dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com def evaluate_javascript(self, tab_descriptor, expression, timeout): 100dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com """Evaluates a JavaScript expression on the given tab. 101dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com 102dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param tab_descriptor: Indicate on which tab to evaluate the expression. 103dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param expression: Indiate what expression to evaluate. 104dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @param timeout: Indicate the timeout of the expression. 105dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com @return the JSONized result of the given expression 106dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com """ 107dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com return self._browser_proxy.evaluate_javascript( 108dc4f0b28fa5cc36db00d600d182b80af5879ab24Chen-Hao Chang@google.com tab_descriptor, expression, timeout) 109