#!/usr/bin/env python # Copyright (c) 2012 The Chromium 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 os import subprocess import sys import time import pyauto_functional import pyauto sys.path.append('/usr/local') # To make autotest libs importable. from autotest.cros import cros_ui from autotest.cros import cryptohome class AccessibilityTest(pyauto.PyUITest): """Tests for Accessibility. Test various chromeos functionalities while Accessibility is turned on. """ find_test_data_dir = 'find_in_page' def ShouldAutoLogin(self): return False def setUp(self): # We want a clean session_manager instance for every run, # so restart ui now. cros_ui.stop(allow_fail=True) cryptohome.remove_all_vaults() cros_ui.start(wait_for_login_prompt=False) pyauto.PyUITest.setUp(self) def tearDown(self): self._DisableSpokenFeedback() pyauto.PyUITest.tearDown(self) def _Login(self): """Perform login.""" credentials = self.GetPrivateInfo()['test_google_account'] self.Login(credentials['username'], credentials['password']) logging.info('Logging in as %s' % credentials['username']) login_info = self.GetLoginInfo() self.assertTrue(login_info['is_logged_in'], msg='Login failed.') def _LoginWithSpokenFeedback(self): self.EnableSpokenFeedback(True) self._Login() self.assertTrue(self.IsSpokenFeedbackEnabled(), msg='Could not enable spoken feedback accessibility mode.') def _EnableSpokenFeedback(self): self.EnableSpokenFeedback(True) self.assertTrue(self.IsSpokenFeedbackEnabled(), msg='Could not enable spoken feedback accessibility mode.') def _DisableSpokenFeedback(self): self.EnableSpokenFeedback(False) self.assertFalse(self.IsSpokenFeedbackEnabled(), msg='Could not disable spoken feedback accessibility mode.') def testCanEnableSpokenFeedback(self): """Tests that spoken feedback accessibility mode can be enabled.""" self._EnableSpokenFeedback() def testLoginAsGuest(self): """Test that Guest user login is possible when Accessibility is on.""" self._EnableSpokenFeedback() self.LoginAsGuest() login_info = self.GetLoginInfo() self.assertTrue(login_info['is_logged_in'], msg='Not logged in at all.') self.assertTrue(login_info['is_guest'], msg='Not logged in as guest.') url = self.GetFileURLForDataPath('title1.html') self.NavigateToURL(url) self.assertEqual(1, self.FindInPage('title')['match_count'], msg='Failed to load the page or find the page contents.') # crbug.com/129218: adding a volume change functionality to automate this # issue. Please note that we don't verify any functionality here. default_volume = self.GetVolumeInfo() for test_volume in (50.00, 77.00, 85.00, 20.00): self.SetVolume(test_volume) time.sleep(1) self.SetVolume(default_volume.get('volume')) def testAccessibilityBeforeLogin(self): """Test Accessibility before login.""" self._LoginWithSpokenFeedback() self.Logout() self.assertFalse(self.GetLoginInfo()['is_logged_in'], msg='Still logged in when we should be logged out.') self.assertTrue(self.IsSpokenFeedbackEnabled(), msg='Spoken feedback accessibility mode disabled after loggin out.') def testAccessibilityAfterLogin(self): """Test Accessibility after login.""" self._Login() self._EnableSpokenFeedback() def testPagePerformance(self): """Test Chrome works fine when Accessibility is on.""" self._LoginWithSpokenFeedback() # Verify that opened tab page behaves normally when Spoken Feedback is # enabled. crosbug.com/26731 url = self.GetFileURLForDataPath(self.find_test_data_dir, 'largepage.html') self.NavigateToURL(url) self.assertEqual(373, self.FindInPage('daughter of Prince')['match_count'], msg='Failed to load the page or find the page contents.') if __name__ == '__main__': pyauto_functional.Main()