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.
5 from telemetry import decorators
6 from telemetry.core import util
7 from telemetry.page.actions import play
8 from telemetry.unittest import tab_test_case
10 AUDIO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#audio_1", "playing");'
11 VIDEO_1_PLAYING_CHECK = 'window.__hasEventCompleted("#video_1", "playing");'
12 VIDEO_1_ENDED_CHECK = 'window.__hasEventCompleted("#video_1", "ended");'
15 class PlayActionTest(tab_test_case.TabTestCase):
18 tab_test_case.TabTestCase.setUp(self)
19 self.Navigate('video_test.html')
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))
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))
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))
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(util.TimeoutException, action.RunAction, self._tab)
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)
84 self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))
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))
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(util.TimeoutException, action.RunAction, self._tab)
109 # Assert video did not end.
110 self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_ENDED_CHECK))