| # Copyright 2016 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import logging |
| import time |
| |
| from autotest_lib.client.bin import test |
| from autotest_lib.client.bin import utils |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.common_lib.cros import chrome |
| from autotest_lib.client.cros.input_playback import input_playback |
| from telemetry.core import exceptions |
| |
| |
| class platform_InputBrowserNav(test.test): |
| """Tests if device suspends using shortcut keys.""" |
| version = 1 |
| _WAIT = 15 |
| URL_1 = 'https://www.youtube.com' |
| URL_2 = 'https://www.yahoo.com' |
| |
| def warmup(self): |
| """Test setup.""" |
| # Emulate keyboard. |
| # See input_playback. The keyboard is used to play back shortcuts. |
| self._player = input_playback.InputPlayback() |
| self._player.emulate(input_type='keyboard') |
| self._player.find_connected_inputs() |
| |
| def test_back(self, tab): |
| """Use keyboard shortcut to test Back (F1) key. |
| |
| @param tab: current tab. |
| |
| """ |
| self._player.blocking_playback_of_default_file( |
| input_type='keyboard', filename='keyboard_f1') |
| time.sleep(self._WAIT) |
| self.verify_url(tab, self.URL_1) |
| |
| def test_forward(self, tab): |
| """Use keyboard shortcut to test Forward (F2) key. |
| |
| @param tab: current tab. |
| |
| """ |
| self._player.blocking_playback_of_default_file( |
| input_type='keyboard', filename='keyboard_f2') |
| time.sleep(self._WAIT) |
| self.verify_url(tab, self.URL_2) |
| |
| def test_refresh(self, tab): |
| """Use keyboard shortcut to test Refresh (F3) key. |
| |
| @param tab: current tab. |
| |
| @raises error.TestFail if refresh unsuccessful. |
| |
| """ |
| # Set JS variable to initial true value to confirm refresh worked. |
| # We are expecting this variable not to exist after the refresh. |
| tab.EvaluateJavaScript("not_refreshed=true") |
| js = 'not_refreshed == true' |
| utils.wait_for_value( |
| lambda: tab.EvaluateJavaScript(js), |
| expected_value=True) |
| |
| self._player.blocking_playback_of_default_file( |
| input_type='keyboard', filename='keyboard_f3') |
| time.sleep(self._WAIT) |
| |
| # Verify we are still on the second url. |
| self.verify_url(tab, self.URL_2) |
| # Check to see not_refresh does not exist (results in exception). |
| # If it does, the refresh was not successful. |
| try: |
| not_refresh = tab.EvaluateJavaScript(js) |
| raise error.TestFail("Refresh unsuccesful.") |
| except exceptions.EvaluateException: |
| logging.info("Refresh successful.") |
| |
| def verify_url(self, tab, correct_url): |
| """Verify tab's current url is the url wanted. |
| |
| @param tab: current tab. |
| @param correct_url: url wanted. |
| |
| @raises: error.TestFail if incorrect url. |
| |
| """ |
| current_url = tab.url.encode('utf8').rstrip('/') |
| utils.poll_for_condition( |
| lambda: current_url == correct_url, |
| exception=error.TestFail('Incorrect navigation: %s' |
| % current_url), |
| timeout=self._WAIT) |
| |
| def run_once(self): |
| """ |
| Open browser, navigate to urls and test |
| forward, backward, and refresh functions. |
| |
| """ |
| with chrome.Chrome() as cr: |
| tab = cr.browser.tabs[0] |
| logging.info('Initially navigate to %s.' % self.URL_1) |
| tab.Navigate(self.URL_1) |
| time.sleep(self._WAIT) |
| logging.info('Next, navigate to %s.' % self.URL_2) |
| tab.Navigate(self.URL_2) |
| |
| self.test_back(tab) |
| self.test_forward(tab) |
| self.test_refresh(tab) |
| |
| def cleanup(self): |
| """Test cleanup.""" |
| self._player.close() |