| Index: chrome/test/functional/youtube.py
|
| ===================================================================
|
| --- chrome/test/functional/youtube.py (revision 261231)
|
| +++ chrome/test/functional/youtube.py (working copy)
|
| @@ -1,273 +0,0 @@
|
| -#!/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 re
|
| -import time
|
| -
|
| -import pyauto_functional
|
| -import pyauto
|
| -import pyauto_errors
|
| -import test_utils
|
| -
|
| -
|
| -class YoutubeTestHelper():
|
| - """Helper functions for Youtube tests.
|
| -
|
| - For sample usage, look at class YoutubeTest.
|
| - """
|
| -
|
| - # YouTube player states
|
| - is_unstarted = '-1'
|
| - is_playing = '1'
|
| - is_paused = '2'
|
| - has_ended = '0'
|
| - _pyauto = None
|
| -
|
| - def __init__(self, pyauto):
|
| - self._pyauto = pyauto
|
| -
|
| - def IsFlashPluginEnabled(self):
|
| - """Verify flash plugin availability and its state."""
|
| - return [x for x in self._pyauto.GetPluginsInfo().Plugins() \
|
| - if x['name'] == 'Shockwave Flash' and x['enabled']]
|
| -
|
| - def AssertPlayerState(self, state, msg):
|
| - expected_regex = '^%s$' % state
|
| - self.WaitForDomNode('id("playerState")', expected_value=expected_regex,
|
| - msg=msg)
|
| -
|
| - def WaitUntilPlayerReady(self):
|
| - """Verify that player is ready."""
|
| - self.AssertPlayerState(state=self.is_unstarted,
|
| - msg='Failed to load youtube player.')
|
| -
|
| - def GetPlayerState(self):
|
| - """Returns a player state."""
|
| - js = """
|
| - var val = ytplayer.getPlayerState();
|
| - window.domAutomationController.send(val + '');
|
| - """
|
| - return self._pyauto.ExecuteJavascript(js)
|
| -
|
| - def GetVideoInfo(self):
|
| - """Returns Youtube video info."""
|
| - youtube_apis = self._pyauto.GetPrivateInfo()['youtube_api']
|
| - youtube_debug_text = youtube_apis['GetDebugText']
|
| - return self._pyauto.ExecuteJavascript(
|
| - 'window.domAutomationController.send(%s);' % youtube_debug_text)
|
| -
|
| - def GetVideoDroppedFrames(self):
|
| - """Returns total Youtube video dropped frames.
|
| -
|
| - Returns:
|
| - -1 if failed to get video frames from the video data
|
| - """
|
| - video_data = self._pyauto.GetVideoInfo()
|
| - matched = re.search('droppedFrames=([\d\.]+)', video_data)
|
| - if matched:
|
| - return int(matched.group(1))
|
| - else:
|
| - return -1
|
| -
|
| - def GetVideoFrames(self):
|
| - """Returns Youtube video frames/second.
|
| -
|
| - Returns:
|
| - -1 if failed to get droppd frames from the video data.
|
| - """
|
| - video_data = self._pyauto.GetVideoInfo()
|
| - matched = re.search('videoFps=([\d\.]+)', video_data)
|
| - if matched:
|
| - return int(matched.group(1))
|
| - else:
|
| - return -1
|
| -
|
| - def GetVideoTotalBytes(self):
|
| - """Returns video total size in bytes.
|
| -
|
| - To call this function, video must be in the paying state,
|
| - or this returns 0.
|
| - """
|
| - total_bytes = 0
|
| - total_bytes = self._pyauto.ExecuteJavascript("""
|
| - bytesTotal = document.getElementById("bytesTotal");
|
| - window.domAutomationController.send(bytesTotal.innerHTML);
|
| - """)
|
| - return int(total_bytes)
|
| -
|
| - def GetVideoLoadedBytes(self):
|
| - """Returns video size in bytes."""
|
| - loaded_bytes = 0
|
| - loaded_bytes = self.ExecuteJavascript("""
|
| - bytesLoaded = document.getElementById("bytesLoaded");
|
| - window.domAutomationController.send(bytesLoaded.innerHTML);
|
| - """)
|
| - return int(loaded_bytes)
|
| -
|
| - def GetCurrentVideoTime(self):
|
| - """Returns the current time of the video in seconds."""
|
| - current_time = 0
|
| - current_time = self.ExecuteJavascript("""
|
| - videoCurrentTime = document.getElementById("videoCurrentTime");
|
| - window.domAutomationController.send(videoCurrentTime.innerHTML);
|
| - """)
|
| - return int(current_time)
|
| -
|
| - def PlayVideo(self):
|
| - """Plays the loaded video."""
|
| - self._pyauto.ExecuteJavascript("""
|
| - ytplayer.playVideo();
|
| - window.domAutomationController.send('');
|
| - """)
|
| -
|
| - def StopVideo(self):
|
| - """Stops the video and cancels loading."""
|
| - self._pyauto.ExecuteJavascript("""
|
| - ytplayer.stopVideo();
|
| - window.domAutomationController.send('');
|
| - """)
|
| -
|
| - def PauseVideo(self):
|
| - """Pause the video."""
|
| - self.ExecuteJavascript("""
|
| - ytplayer.pauseVideo();
|
| - window.domAutomationController.send('');
|
| - """)
|
| -
|
| - def PlayVideoAndAssert(self, youtube_video='zuzaxlddWbk',
|
| - ignore_assert=False):
|
| - """Start video and assert the playing state.
|
| -
|
| - By default test uses http://www.youtube.com/watch?v=zuzaxlddWbki.
|
| -
|
| - Args:
|
| - youtube_video: The string ID of the youtube video to play.
|
| - ignore_assert: flag to ignore the assertion and continue the test.
|
| - """
|
| - self._pyauto.assertTrue(self._pyauto.IsFlashPluginEnabled(),
|
| - msg='From here Flash plugin is disabled or not available.')
|
| - url = self._pyauto.GetHttpURLForDataPath(
|
| - 'media', 'youtube.html?video=' + youtube_video)
|
| - self._pyauto.NavigateToURL(url)
|
| - self.WaitUntilPlayerReady()
|
| - i = 0
|
| - # The YouTube player will get in a state where it does not return the
|
| - # number of loaded bytes. When this happens we need to reload the page
|
| - # before starting the test.
|
| - while self.GetVideoLoadedBytes() == 1 and i < 30:
|
| - self._pyauto.NavigateToURL(url)
|
| - self.WaitUntilPlayerReady()
|
| - i = i + 1
|
| - self.PlayVideo()
|
| - if ignore_assert:
|
| - return self.is_playing
|
| - self.AssertPlayerState(state=self.is_playing,
|
| - msg='Player did not enter the playing state.')
|
| -
|
| - def VideoBytesLoadingAndAssert(self):
|
| - """Assert the video loading."""
|
| - total_bytes = self.GetVideoTotalBytes()
|
| - prev_loaded_bytes = 0
|
| - loaded_bytes = 0
|
| - count = 0
|
| - while loaded_bytes < total_bytes:
|
| - # We want to test bytes loading only twice
|
| - count = count + 1
|
| - if count == 2:
|
| - break
|
| - loaded_bytes = self.GetVideoLoadedBytes()
|
| - self.assertTrue(prev_loaded_bytes <= loaded_bytes)
|
| - prev_loaded_bytes = loaded_bytes
|
| - # Give some time to load a video
|
| - time.sleep(1)
|
| -
|
| - def PlayFAVideo(self):
|
| - """Play and assert FA video playing.
|
| -
|
| - We are using multiple test videos in case any FA video playback fails
|
| - becuase other tests are palying the same video and the test gets the
|
| - simultaneous playback error.
|
| - """
|
| - fa_videos = ('APRpcscmbY0', 'yQqvrED-np0', 'KJuFw6hQdNY',
|
| - 'BeFQbgxr_9g', 'L6JwlOudqA4')
|
| - credentials = self.GetPrivateInfo()['test_fa_account']
|
| - test_utils.GoogleAccountsLogin(self,
|
| - credentials['username'], credentials['password'])
|
| - for video in fa_videos:
|
| - result = self.PlayVideoAndAssert(video, ignore_assert=True)
|
| - if result is self.is_playing:
|
| - return
|
| - self.assertTrue(False, msg='Player did not enter the playing state.')
|
| -
|
| -
|
| -class YoutubeTest(pyauto.PyUITest, YoutubeTestHelper):
|
| - """Test case for Youtube videos."""
|
| -
|
| - def __init__(self, methodName='runTest', **kwargs):
|
| - pyauto.PyUITest.__init__(self, methodName, **kwargs)
|
| - YoutubeTestHelper.__init__(self, self)
|
| -
|
| - def testPlayerStatus(self):
|
| - """Test that YouTube loads a player and changes player states.
|
| -
|
| - Test verifies various player states like unstarted, playing, paused
|
| - and ended.
|
| - """
|
| - # Navigating to Youtube video. This video is 122 seconds long.
|
| - # During tests, we are not goinig to play this video full.
|
| - self.PlayVideoAndAssert()
|
| - self.PauseVideo()
|
| - self.AssertPlayerState(state=self.is_paused,
|
| - msg='Player did not enter the paused state.')
|
| - # Seek to the end of video
|
| - self.ExecuteJavascript("""
|
| - val = ytplayer.getDuration();
|
| - ytplayer.seekTo(val, true);
|
| - window.domAutomationController.send('');
|
| - """)
|
| - self.PlayVideo()
|
| - # We've seeked to almost the end of the video but not quite.
|
| - # Wait until the end.
|
| - self.AssertPlayerState(state=self.has_ended,
|
| - msg='Player did not reach the stopped state.')
|
| -
|
| - def testPlayerResolution(self):
|
| - """Test various video resolutions."""
|
| - self.PlayVideoAndAssert()
|
| - resolutions = self.ExecuteJavascript("""
|
| - res = ytplayer.getAvailableQualityLevels();
|
| - window.domAutomationController.send(res.toString());
|
| - """)
|
| - resolutions = resolutions.split(',')
|
| - for res in resolutions:
|
| - self.ExecuteJavascript("""
|
| - ytplayer.setPlaybackQuality('%s');
|
| - window.domAutomationController.send('');
|
| - """ % res)
|
| - curr_res = self.ExecuteJavascript("""
|
| - res = ytplayer.getPlaybackQuality();
|
| - window.domAutomationController.send(res + '');
|
| - """)
|
| - self.assertEqual(res, curr_res, msg='Resolution is not set to %s.' % res)
|
| -
|
| - def testPlayerBytes(self):
|
| - """Test that player downloads video bytes."""
|
| - self.PlayVideoAndAssert()
|
| - self.VideoBytesLoadingAndAssert()
|
| -
|
| - def testFAVideo(self):
|
| - """Test that FlashAccess/DRM video plays."""
|
| - self.PlayFAVideo()
|
| - self.StopVideo()
|
| -
|
| - def testFAVideoBytes(self):
|
| - """Test FlashAccess/DRM video bytes loading."""
|
| - self.PlayFAVideo()
|
| - self.VideoBytesLoadingAndAssert()
|
| - self.StopVideo()
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - pyauto_functional.Main()
|
|
|