blob: 89de17f7ed9d90563eda83ae5d1e8ad88b41db03 [file] [log] [blame]
# 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()