Commit 6a207714 by polesye

BLD-970: Fix flaky test.

parent 059c5ce8
...@@ -2,44 +2,44 @@ ...@@ -2,44 +2,44 @@
Feature: LMS Video component Feature: LMS Video component
As a student, I want to view course videos in LMS As a student, I want to view course videos in LMS
# BLD-970 Failing currently in master
# 1 # 1
# Scenario: Video component stores position correctly when page is reloaded Scenario: Video component stores position correctly when page is reloaded
# Given the course has a Video component in "Youtube" mode Given the course has a Video component in "Youtube" mode
# When the video has rendered in "Youtube" mode When the video has rendered in "Youtube" mode
# And I click video button "play" And I click video button "play"
# Then I seek video to "10" seconds And I click video button "pause"
# And I click video button "pause" Then I seek video to "10" seconds
# And I reload the page And I click video button "play"
# And I click video button "play" And I click video button "pause"
# Then I see video starts playing from "0:10" position And I reload the page with video
Then I see video slider at "10" seconds
# 1 # 2
Scenario: Video component is fully rendered in the LMS in HTML5 mode Scenario: Video component is fully rendered in the LMS in HTML5 mode
Given the course has a Video component in "HTML5" mode Given the course has a Video component in "HTML5" mode
When the video has rendered in "HTML5" mode When the video has rendered in "HTML5" mode
And all sources are correct And all sources are correct
# 2 # 3
@skip_firefox @skip_firefox
Scenario: Autoplay is disabled in LMS for a Video component Scenario: Autoplay is disabled in LMS for a Video component
Given the course has a Video component in "HTML5" mode Given the course has a Video component in "HTML5" mode
Then when I view the video it does not have autoplay enabled Then when I view the video it does not have autoplay enabled
# 3 # 4
# Youtube testing # Youtube testing
Scenario: Video component is fully rendered in the LMS in Youtube mode with HTML5 sources Scenario: Video component is fully rendered in the LMS in Youtube mode with HTML5 sources
Given youtube server is up and response time is 0.4 seconds Given youtube server is up and response time is 0.4 seconds
And the course has a Video component in "Youtube_HTML5" mode And the course has a Video component in "Youtube_HTML5" mode
When the video has rendered in "Youtube" mode When the video has rendered in "Youtube" mode
# 4 # 5
Scenario: Video component is not rendered in the LMS in Youtube mode with HTML5 sources Scenario: Video component is not rendered in the LMS in Youtube mode with HTML5 sources
Given youtube server is up and response time is 2 seconds Given youtube server is up and response time is 2 seconds
And the course has a Video component in "Youtube_HTML5" mode And the course has a Video component in "Youtube_HTML5" mode
When the video has rendered in "HTML5" mode When the video has rendered in "HTML5" mode
# 5 # 6
Scenario: Video component is not rendered in the LMS in Youtube mode with HTML5 sources when YouTube API is blocked Scenario: Video component is not rendered in the LMS in Youtube mode with HTML5 sources when YouTube API is blocked
Given youtube server is up and response time is 2 seconds Given youtube server is up and response time is 2 seconds
And youtube stub server blocks YouTube API And youtube stub server blocks YouTube API
...@@ -47,25 +47,25 @@ Feature: LMS Video component ...@@ -47,25 +47,25 @@ Feature: LMS Video component
And I wait "3" seconds And I wait "3" seconds
Then the video has rendered in "HTML5" mode Then the video has rendered in "HTML5" mode
# 6 # 7
Scenario: Video component is rendered in the LMS in Youtube mode without HTML5 sources Scenario: Video component is rendered in the LMS in Youtube mode without HTML5 sources
Given youtube server is up and response time is 2 seconds Given youtube server is up and response time is 2 seconds
And the course has a Video component in "Youtube" mode And the course has a Video component in "Youtube" mode
When the video has rendered in "Youtube" mode When the video has rendered in "Youtube" mode
# 7 # 8
Scenario: Video component is rendered in the LMS in Youtube mode with HTML5 sources that doesn't supported by browser Scenario: Video component is rendered in the LMS in Youtube mode with HTML5 sources that doesn't supported by browser
Given youtube server is up and response time is 2 seconds Given youtube server is up and response time is 2 seconds
And the course has a Video component in "Youtube_HTML5_Unsupported_Video" mode And the course has a Video component in "Youtube_HTML5_Unsupported_Video" mode
When the video has rendered in "Youtube" mode When the video has rendered in "Youtube" mode
# 8 # 9
Scenario: Video component is rendered in the LMS in HTML5 mode with HTML5 sources that doesn't supported by browser Scenario: Video component is rendered in the LMS in HTML5 mode with HTML5 sources that doesn't supported by browser
Given the course has a Video component in "HTML5_Unsupported_Video" mode Given the course has a Video component in "HTML5_Unsupported_Video" mode
Then error message is shown Then error message is shown
And error message has correct text And error message has correct text
# 9 # 10
Scenario: Multiple videos in sequentials all load and work, switching between sequentials Scenario: Multiple videos in sequentials all load and work, switching between sequentials
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And it has a video "A" in "Youtube" mode in position "1" of sequential And it has a video "A" in "Youtube" mode in position "1" of sequential
...@@ -87,7 +87,7 @@ Feature: LMS Video component ...@@ -87,7 +87,7 @@ Feature: LMS Video component
When I open video "A" When I open video "A"
Then video "A" should start playing at speed "2.0" Then video "A" should start playing at speed "2.0"
# 10 # 11
Scenario: Video component stores speed correctly when each video is in separate sequence Scenario: Video component stores speed correctly when each video is in separate sequence
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And it has a video "A" in "Youtube" mode in position "1" of sequential And it has a video "A" in "Youtube" mode in position "1" of sequential
...@@ -100,7 +100,7 @@ Feature: LMS Video component ...@@ -100,7 +100,7 @@ Feature: LMS Video component
Then video "C" should start playing at speed "0.75" Then video "C" should start playing at speed "0.75"
When I open video "A" When I open video "A"
Then video "A" should start playing at speed "2.0" Then video "A" should start playing at speed "2.0"
And I reload the page And I reload the page with video
When I open video "A" When I open video "A"
Then video "A" should start playing at speed "2.0" Then video "A" should start playing at speed "2.0"
And I select the "1.0" speed on video "A" And I select the "1.0" speed on video "A"
...@@ -109,7 +109,7 @@ Feature: LMS Video component ...@@ -109,7 +109,7 @@ Feature: LMS Video component
When I open video "C" When I open video "C"
Then video "C" should start playing at speed "1.0" Then video "C" should start playing at speed "1.0"
# 11 # 12
Scenario: Language menu works correctly in Video component Scenario: Language menu works correctly in Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "chinese_transcripts.srt" transcript file in assets And I have a "chinese_transcripts.srt" transcript file in assets
...@@ -124,7 +124,7 @@ Feature: LMS Video component ...@@ -124,7 +124,7 @@ Feature: LMS Video component
And I select language with code "en" And I select language with code "en"
And I see "Hi, welcome to Edx." text in the captions And I see "Hi, welcome to Edx." text in the captions
# 12 # 13
Scenario: CC button works correctly w/o english transcript in HTML5 mode of Video component Scenario: CC button works correctly w/o english transcript in HTML5 mode of Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "chinese_transcripts.srt" transcript file in assets And I have a "chinese_transcripts.srt" transcript file in assets
...@@ -134,7 +134,7 @@ Feature: LMS Video component ...@@ -134,7 +134,7 @@ Feature: LMS Video component
And I make sure captions are opened And I make sure captions are opened
Then I see "好 各位同学" text in the captions Then I see "好 各位同学" text in the captions
# 13 # 14
Scenario: CC button works correctly only w/ english transcript in HTML5 mode of Video component Scenario: CC button works correctly only w/ english transcript in HTML5 mode of Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets
...@@ -144,7 +144,7 @@ Feature: LMS Video component ...@@ -144,7 +144,7 @@ Feature: LMS Video component
And I make sure captions are opened And I make sure captions are opened
Then I see "Hi, welcome to Edx." text in the captions Then I see "Hi, welcome to Edx." text in the captions
# 14 # 15
Scenario: CC button works correctly w/o english transcript in Youtube mode of Video component Scenario: CC button works correctly w/o english transcript in Youtube mode of Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "chinese_transcripts.srt" transcript file in assets And I have a "chinese_transcripts.srt" transcript file in assets
...@@ -154,7 +154,7 @@ Feature: LMS Video component ...@@ -154,7 +154,7 @@ Feature: LMS Video component
And I make sure captions are opened And I make sure captions are opened
Then I see "好 各位同学" text in the captions Then I see "好 各位同学" text in the captions
# 15 # 16
Scenario: CC button works correctly if transcripts and sub fields are empty, but transcript file exists in assets (Youtube mode of Video component) Scenario: CC button works correctly if transcripts and sub fields are empty, but transcript file exists in assets (Youtube mode of Video component)
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets
...@@ -162,12 +162,12 @@ Feature: LMS Video component ...@@ -162,12 +162,12 @@ Feature: LMS Video component
And I make sure captions are opened And I make sure captions are opened
Then I see "Hi, welcome to Edx." text in the captions Then I see "Hi, welcome to Edx." text in the captions
# 16 # 17
Scenario: CC button is hidden if no translations Scenario: CC button is hidden if no translations
Given the course has a Video component in "Youtube" mode Given the course has a Video component in "Youtube" mode
Then button "CC" is hidden Then button "CC" is hidden
# 17 # 18
Scenario: Video is aligned correctly if transcript is visible in fullscreen mode Scenario: Video is aligned correctly if transcript is visible in fullscreen mode
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets
...@@ -178,13 +178,13 @@ Feature: LMS Video component ...@@ -178,13 +178,13 @@ Feature: LMS Video component
And I click video button "fullscreen" And I click video button "fullscreen"
Then I see video aligned correctly with enabled transcript Then I see video aligned correctly with enabled transcript
# 18 # 19
Scenario: Video is aligned correctly if transcript is hidden in fullscreen mode Scenario: Video is aligned correctly if transcript is hidden in fullscreen mode
Given the course has a Video component in "Youtube" mode Given the course has a Video component in "Youtube" mode
And I click video button "fullscreen" And I click video button "fullscreen"
Then I see video aligned correctly without enabled transcript Then I see video aligned correctly without enabled transcript
# 19 # 20
Scenario: Video is aligned correctly on transcript toggle in fullscreen mode Scenario: Video is aligned correctly on transcript toggle in fullscreen mode
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets
...@@ -197,7 +197,7 @@ Feature: LMS Video component ...@@ -197,7 +197,7 @@ Feature: LMS Video component
And I click video button "CC" And I click video button "CC"
Then I see video aligned correctly without enabled transcript Then I see video aligned correctly without enabled transcript
# 20 # 21
Scenario: Download Transcript button works correctly in Video component Scenario: Download Transcript button works correctly in Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets
...@@ -219,7 +219,7 @@ Feature: LMS Video component ...@@ -219,7 +219,7 @@ Feature: LMS Video component
When I open video "C" When I open video "C"
Then menu "download_transcript" doesn't exist Then menu "download_transcript" doesn't exist
# 21 # 22
Scenario: Youtube video has correct transcript if fields for other speeds are filled. Scenario: Youtube video has correct transcript if fields for other speeds are filled.
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets And I have a "subs_OEoXaMPEzfM.srt.sjson" transcript file in assets
...@@ -230,11 +230,11 @@ Feature: LMS Video component ...@@ -230,11 +230,11 @@ Feature: LMS Video component
And I make sure captions are opened And I make sure captions are opened
Then I see "Hi, welcome to Edx." text in the captions Then I see "Hi, welcome to Edx." text in the captions
And I select the "1.50" speed And I select the "1.50" speed
And I reload the page And I reload the page with video
Then I see "Hi, welcome to Edx." text in the captions Then I see "Hi, welcome to Edx." text in the captions
And I see duration "1:00" And I see duration "1:00"
# 22 # 23
Scenario: Download button works correctly for non-english transcript in Youtube mode of Video component Scenario: Download button works correctly for non-english transcript in Youtube mode of Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "chinese_transcripts.srt" transcript file in assets And I have a "chinese_transcripts.srt" transcript file in assets
...@@ -248,7 +248,7 @@ Feature: LMS Video component ...@@ -248,7 +248,7 @@ Feature: LMS Video component
And I see "好 各位同学" text in the captions And I see "好 各位同学" text in the captions
Then I can download transcript in "srt" format that has text "好 各位同学" Then I can download transcript in "srt" format that has text "好 各位同学"
# 23 # 24
Scenario: Download button works correctly for non-english transcript in HTML5 mode of Video component Scenario: Download button works correctly for non-english transcript in HTML5 mode of Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "chinese_transcripts.srt" transcript file in assets And I have a "chinese_transcripts.srt" transcript file in assets
...@@ -262,7 +262,7 @@ Feature: LMS Video component ...@@ -262,7 +262,7 @@ Feature: LMS Video component
And I see "好 各位同学" text in the captions And I see "好 各位同学" text in the captions
Then I can download transcript in "srt" format that has text "好 各位同学" Then I can download transcript in "srt" format that has text "好 各位同学"
# 24 # 25
Scenario: Download button works correctly w/o english transcript in HTML5 mode of Video component Scenario: Download button works correctly w/o english transcript in HTML5 mode of Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "chinese_transcripts.srt" transcript file in assets And I have a "chinese_transcripts.srt" transcript file in assets
...@@ -272,7 +272,7 @@ Feature: LMS Video component ...@@ -272,7 +272,7 @@ Feature: LMS Video component
And I see "好 各位同学" text in the captions And I see "好 各位同学" text in the captions
Then I can download transcript in "srt" format that has text "好 各位同学" Then I can download transcript in "srt" format that has text "好 各位同学"
# 25 # 26
Scenario: Download button works correctly w/o english transcript in Youtube mode of Video component Scenario: Download button works correctly w/o english transcript in Youtube mode of Video component
Given I am registered for the course "test_course" Given I am registered for the course "test_course"
And I have a "chinese_transcripts.srt" transcript file in assets And I have a "chinese_transcripts.srt" transcript file in assets
...@@ -282,7 +282,7 @@ Feature: LMS Video component ...@@ -282,7 +282,7 @@ Feature: LMS Video component
And I see "好 各位同学" text in the captions And I see "好 各位同学" text in the captions
Then I can download transcript in "srt" format that has text "好 各位同学" Then I can download transcript in "srt" format that has text "好 各位同学"
# 26 # 27
Scenario: Verify that each video in each sub-section includes a transcript for non-Youtube countries. Scenario: Verify that each video in each sub-section includes a transcript for non-Youtube countries.
Given youtube server is up and response time is 2 seconds Given youtube server is up and response time is 2 seconds
And I am registered for the course "test_course" And I am registered for the course "test_course"
......
...@@ -6,7 +6,7 @@ import json ...@@ -6,7 +6,7 @@ import json
import os import os
import time import time
import requests import requests
from nose.tools import assert_less from nose.tools import assert_less, assert_equal
from common import i_am_registered_for_the_course, visit_scenario_item from common import i_am_registered_for_the_course, visit_scenario_item
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.conf import settings from django.conf import settings
...@@ -183,9 +183,6 @@ def add_video_to_course(course, parent_location=None, player_mode=None, data=Non ...@@ -183,9 +183,6 @@ def add_video_to_course(course, parent_location=None, player_mode=None, data=Non
parent_location = add_vertical_to_course(course) parent_location = add_vertical_to_course(course)
kwargs = get_metadata(parent_location, player_mode, data, display_name=display_name) kwargs = get_metadata(parent_location, player_mode, data, display_name=display_name)
world.scenario_dict['VIDEO'] = world.ItemFactory.create(**kwargs) world.scenario_dict['VIDEO'] = world.ItemFactory.create(**kwargs)
world.wait_for_present('.is-initialized')
world.wait_for_invisible('.video-wrapper .spinner')
world.wait_for_ajax_complete()
def add_vertical_to_course(course_num): def add_vertical_to_course(course_num):
...@@ -223,6 +220,7 @@ def navigate_to_an_item_in_a_sequence(number): ...@@ -223,6 +220,7 @@ def navigate_to_an_item_in_a_sequence(number):
def change_video_speed(speed): def change_video_speed(speed):
world.browser.execute_script("$('.speeds').addClass('open')") world.browser.execute_script("$('.speeds').addClass('open')")
speed_css = 'li[data-speed="{0}"] a'.format(speed) speed_css = 'li[data-speed="{0}"] a'.format(speed)
world.wait_for_visible('.speeds')
world.css_click(speed_css) world.css_click(speed_css)
...@@ -302,6 +300,19 @@ def find_caption_line_by_data_index(index): ...@@ -302,6 +300,19 @@ def find_caption_line_by_data_index(index):
return world.css_find(SELECTOR).first return world.css_find(SELECTOR).first
def wait_for_video():
world.wait_for_present('.is-initialized')
world.wait_for_present('div.vidtime')
world.wait_for_invisible('.video-wrapper .spinner')
world.wait_for_ajax_complete()
@step("I reload the page with video$")
def reload_the_page_with_video(_step):
_step.given('I reload the page')
wait_for_video()
@step('youtube stub server (.*) YouTube API') @step('youtube stub server (.*) YouTube API')
def configure_youtube_api(_step, action): def configure_youtube_api(_step, action):
action=action.strip() action=action.strip()
...@@ -326,6 +337,7 @@ def view_video(_step, player_mode): ...@@ -326,6 +337,7 @@ def view_video(_step, player_mode):
data = _step.hashes[0] if _step.hashes else None data = _step.hashes[0] if _step.hashes else None
add_video_to_course(coursenum, player_mode=player_mode.lower(), data=data) add_video_to_course(coursenum, player_mode=player_mode.lower(), data=data)
visit_scenario_item('SECTION') visit_scenario_item('SECTION')
wait_for_video()
@step('a video in "([^"]*)" mode(?:\:)?$') @step('a video in "([^"]*)" mode(?:\:)?$')
...@@ -333,6 +345,7 @@ def add_video(_step, player_mode): ...@@ -333,6 +345,7 @@ def add_video(_step, player_mode):
data = _step.hashes[0] if _step.hashes else None data = _step.hashes[0] if _step.hashes else None
add_video_to_course(coursenum, player_mode=player_mode.lower(), data=data) add_video_to_course(coursenum, player_mode=player_mode.lower(), data=data)
visit_scenario_item('SECTION') visit_scenario_item('SECTION')
wait_for_video()
@step('video(?:s)? "([^"]*)" in "([^"]*)" mode in position "([^"]*)" of sequential(?:\:)?$') @step('video(?:s)? "([^"]*)" in "([^"]*)" mode in position "([^"]*)" of sequential(?:\:)?$')
...@@ -345,6 +358,7 @@ def add_video_in_position(_step, video_ids, player_mode, position): ...@@ -345,6 +358,7 @@ def add_video_in_position(_step, video_ids, player_mode, position):
@step('I open the section with videos$') @step('I open the section with videos$')
def visit_video_section(_step): def visit_video_section(_step):
visit_scenario_item('SECTION') visit_scenario_item('SECTION')
wait_for_video()
@step('I select the "([^"]*)" speed$') @step('I select the "([^"]*)" speed$')
...@@ -493,15 +507,19 @@ def select_language(_step, code): ...@@ -493,15 +507,19 @@ def select_language(_step, code):
@step('I click video button "([^"]*)"$') @step('I click video button "([^"]*)"$')
def click_button(_step, button): def click_button(_step, button):
world.css_click(VIDEO_BUTTONS[button]) world.css_click(VIDEO_BUTTONS[button])
world.wait_for_ajax_complete()
@step('I see video starts playing from "([^"]*)" position$') @step('I see video slider at "([^"]*)" seconds$')
def start_playing_video_from_n_seconds(_step, position): def start_playing_video_from_n_seconds(_step, position):
world.wait_for( world.wait_for(
func=lambda _: world.css_html('.vidtime')[:4] == position.strip(), func=lambda _: elapsed_time() > 0,
timeout=5 timeout=30
) )
actual_position = elapsed_time()
assert_equal(actual_position, int(position), "Current position is {}, but should be {}".format(actual_position, position))
@step('I see duration "([^"]*)"$') @step('I see duration "([^"]*)"$')
def i_see_duration(_step, position): def i_see_duration(_step, position):
...@@ -518,6 +536,7 @@ def seek_video_to_n_seconds(_step, seconds): ...@@ -518,6 +536,7 @@ def seek_video_to_n_seconds(_step, seconds):
time = float(seconds.strip()) time = float(seconds.strip())
jsCode = "$('.video').data('video-player-state').videoPlayer.onSlideSeek({{time: {0:f}}})".format(time) jsCode = "$('.video').data('video-player-state').videoPlayer.onSlideSeek({{time: {0:f}}})".format(time)
world.browser.execute_script(jsCode) world.browser.execute_script(jsCode)
_step.given('I see video slider at "{}" seconds'.format(seconds))
@step('I have a "([^"]*)" transcript file in assets$') @step('I have a "([^"]*)" transcript file in assets$')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment