1cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2013 The Chromium Authors. All rights reserved. 2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be 3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file. 4cef7893435aa41160dd1255c43cb8498279738ccChris Craik 5cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.core import exceptions 6cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry import decorators 7cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.internal.actions import seek 8cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.testing import tab_test_case 9cef7893435aa41160dd1255c43cb8498279738ccChris Craik 10cef7893435aa41160dd1255c43cb8498279738ccChris CraikAUDIO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#audio_1", "seeked");' 11cef7893435aa41160dd1255c43cb8498279738ccChris CraikVIDEO_1_SEEKED_CHECK = 'window.__hasEventCompleted("#video_1", "seeked");' 12cef7893435aa41160dd1255c43cb8498279738ccChris Craik 13cef7893435aa41160dd1255c43cb8498279738ccChris Craik 14cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass SeekActionTest(tab_test_case.TabTestCase): 15cef7893435aa41160dd1255c43cb8498279738ccChris Craik 16cef7893435aa41160dd1255c43cb8498279738ccChris Craik def setUp(self): 17cef7893435aa41160dd1255c43cb8498279738ccChris Craik tab_test_case.TabTestCase.setUp(self) 18cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.Navigate('video_test.html') 19cef7893435aa41160dd1255c43cb8498279738ccChris Craik 20cef7893435aa41160dd1255c43cb8498279738ccChris Craik @decorators.Disabled('linux') # crbug.com/418577 21cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testSeekWithNoSelector(self): 22cef7893435aa41160dd1255c43cb8498279738ccChris Craik """Tests that with no selector Seek action seeks first media element.""" 23cef7893435aa41160dd1255c43cb8498279738ccChris Craik action = seek.SeekAction(seconds=1, timeout_in_seconds=5) 24cef7893435aa41160dd1255c43cb8498279738ccChris Craik action.WillRunAction(self._tab) 25cef7893435aa41160dd1255c43cb8498279738ccChris Craik action.RunAction(self._tab) 26cef7893435aa41160dd1255c43cb8498279738ccChris Craik # Assert only first video has played. 27cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK)) 28cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK)) 29cef7893435aa41160dd1255c43cb8498279738ccChris Craik 30cef7893435aa41160dd1255c43cb8498279738ccChris Craik @decorators.Disabled('linux') # crbug.com/418577 31cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testSeekWithVideoSelector(self): 32cef7893435aa41160dd1255c43cb8498279738ccChris Craik """Tests that Seek action seeks video element matching selector.""" 33cef7893435aa41160dd1255c43cb8498279738ccChris Craik action = seek.SeekAction(seconds=1, selector='#video_1', 34cef7893435aa41160dd1255c43cb8498279738ccChris Craik timeout_in_seconds=5) 35cef7893435aa41160dd1255c43cb8498279738ccChris Craik action.WillRunAction(self._tab) 36cef7893435aa41160dd1255c43cb8498279738ccChris Craik # Both videos not playing before running action. 37cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK)) 38cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK)) 39cef7893435aa41160dd1255c43cb8498279738ccChris Craik action.RunAction(self._tab) 40cef7893435aa41160dd1255c43cb8498279738ccChris Craik # Assert only video matching selector has played. 41cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK)) 42cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK)) 43cef7893435aa41160dd1255c43cb8498279738ccChris Craik 44cef7893435aa41160dd1255c43cb8498279738ccChris Craik @decorators.Disabled('linux') # crbug.com/418577 45cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testSeekWithAllSelector(self): 46cef7893435aa41160dd1255c43cb8498279738ccChris Craik """Tests that Seek action seeks all video elements with selector='all'.""" 47cef7893435aa41160dd1255c43cb8498279738ccChris Craik action = seek.SeekAction(seconds=1, selector='all', 48cef7893435aa41160dd1255c43cb8498279738ccChris Craik timeout_in_seconds=5) 49cef7893435aa41160dd1255c43cb8498279738ccChris Craik action.WillRunAction(self._tab) 50cef7893435aa41160dd1255c43cb8498279738ccChris Craik # Both videos not playing before running action. 51cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK)) 52cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertFalse(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK)) 53cef7893435aa41160dd1255c43cb8498279738ccChris Craik action.RunAction(self._tab) 54cef7893435aa41160dd1255c43cb8498279738ccChris Craik # Assert all media elements played. 55cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertTrue(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK)) 56cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertTrue(self._tab.EvaluateJavaScript(AUDIO_1_SEEKED_CHECK)) 57cef7893435aa41160dd1255c43cb8498279738ccChris Craik 58cef7893435aa41160dd1255c43cb8498279738ccChris Craik @decorators.Disabled('linux') # crbug.com/418577 59cef7893435aa41160dd1255c43cb8498279738ccChris Craik def testSeekWaitForSeekTimeout(self): 60cef7893435aa41160dd1255c43cb8498279738ccChris Craik """Tests that wait_for_seeked timeouts if video does not seek.""" 61cef7893435aa41160dd1255c43cb8498279738ccChris Craik action = seek.SeekAction(seconds=1, selector='#video_1', 62cef7893435aa41160dd1255c43cb8498279738ccChris Craik timeout_in_seconds=0.1) 63cef7893435aa41160dd1255c43cb8498279738ccChris Craik action.WillRunAction(self._tab) 64cef7893435aa41160dd1255c43cb8498279738ccChris Craik self._tab.EvaluateJavaScript('document.getElementById("video_1").src = ""') 65cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertFalse(self._tab.EvaluateJavaScript(VIDEO_1_SEEKED_CHECK)) 66cef7893435aa41160dd1255c43cb8498279738ccChris Craik self.assertRaises(exceptions.TimeoutException, action.RunAction, self._tab) 67