1# Copyright 2013 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5from telemetry.core import exceptions 6from telemetry import decorators 7from telemetry.internal.actions import play 8from telemetry.testing import tab_test_case 9 10AUDIO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#audio_1", "playing");' 11VIDEO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#video_1", "playing");' 12VIDEO_1_ENDED_CHECK = 'window.__hasEventCompleted("#video_1", "ended");' 13 14 15class PlayActionTest(tab_test_case.TabTestCase): 16 17 def setUp(self): 18 tab_test_case.TabTestCase.setUp(self) 19 self.Navigate('video_test.html') 20 21 @decorators.Disabled('android', 'linux') # crbug.com/418577 22 def testPlayWithNoSelector(self): 23 """Tests that with no selector Play action plays first video element.""" 24 action = play.PlayAction(playing_event_timeout_in_seconds=5) 25 action.WillRunAction(self._tab) 26 # Both videos not playing before running action. 27 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 28 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 29 action.RunAction(self._tab) 30 # Assert only first video has played. 31 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 32 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 33 34 @decorators.Disabled('android', 'linux') # crbug.com/418577 35 def testPlayWithVideoSelector(self): 36 """Tests that Play action plays video element matching selector.""" 37 action = play.PlayAction(selector='#video_1', 38 playing_event_timeout_in_seconds=5) 39 action.WillRunAction(self._tab) 40 # Both videos not playing before running action. 41 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 42 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 43 action.RunAction(self._tab) 44 # Assert only video matching selector has played. 45 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 46 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 47 48 @decorators.Disabled('android', 'linux') # crbug.com/418577 49 def testPlayWithAllSelector(self): 50 """Tests that Play action plays all video elements with selector='all'.""" 51 action = play.PlayAction(selector='all', 52 playing_event_timeout_in_seconds=5) 53 action.WillRunAction(self._tab) 54 # Both videos not playing before running action. 55 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 56 self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 57 action.RunAction(self._tab) 58 # Assert all media elements played. 59 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 60 self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_PLAYING_CHECK)) 61 62 # http://crbug.com/273887 63 @decorators.Disabled('linux') # crbug.com/418577 64 def testPlayWaitForPlayTimeout(self): 65 """Tests that wait_for_playing timeouts if video does not play.""" 66 action = play.PlayAction(selector='#video_1', 67 playing_event_timeout_in_seconds=5) 68 action.WillRunAction(self._tab) 69 self._tab.EvaluateJavaScript('document.getElementById("video_1").src = ""') 70 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 71 self.assertRaises(exceptions.TimeoutException, action.RunAction, self._tab) 72 73 @decorators.Disabled('android', 'linux') # crbug.com/418577 74 def testPlayWaitForEnded(self): 75 """Tests that wait_for_ended waits for video to end.""" 76 action = play.PlayAction(selector='#video_1', 77 ended_event_timeout_in_seconds=5) 78 action.WillRunAction(self._tab) 79 # Assert video not playing before running action. 80 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 81 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 82 action.RunAction(self._tab) 83 # Assert video ended. 84 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 85 86 @decorators.Disabled('linux') # crbug.com/418577 87 def testPlayWithoutWaitForEnded(self): 88 """Tests that wait_for_ended waits for video to end.""" 89 action = play.PlayAction(selector='#video_1', 90 ended_event_timeout_in_seconds=0) 91 action.WillRunAction(self._tab) 92 # Assert video not playing before running action. 93 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 94 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 95 action.RunAction(self._tab) 96 # Assert video did not end. 97 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 98 99 @decorators.Disabled('linux') # crbug.com/418577 100 def testPlayWaitForEndedTimeout(self): 101 """Tests that action raises exception if timeout is reached.""" 102 action = play.PlayAction(selector='#video_1', 103 ended_event_timeout_in_seconds=0.1) 104 action.WillRunAction(self._tab) 105 # Assert video not playing before running action. 106 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_PLAYING_CHECK)) 107 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 108 self.assertRaises(exceptions.TimeoutException, action.RunAction, self._tab) 109 # Assert video did not end. 110 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK)) 111