diff --git a/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py b/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py
index 3f91297755..932c21b7a6 100644
--- a/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py
+++ b/cms/djangoapps/contentstore/features/component_settings_editor_helpers.py
@@ -4,6 +4,7 @@
from lettuce import world
from nose.tools import assert_equal, assert_in # pylint: disable=E0611
from terrain.steps import reload_the_page
+from common import type_in_codemirror
@world.absorb
@@ -114,6 +115,16 @@ def edit_component():
world.css_click('a.edit-button')
+def enter_xml_in_advanced_problem(step, text):
+ """
+ Edits an advanced problem (assumes only on page),
+ types the provided XML, and saves the component.
+ """
+ world.edit_component()
+ type_in_codemirror(0, text)
+ world.save_component(step)
+
+
@world.absorb
def verify_setting_entry(setting, display_name, value, explicitly_set):
"""
diff --git a/cms/djangoapps/contentstore/features/course-export.feature b/cms/djangoapps/contentstore/features/course-export.feature
index 6dbd74da46..ff92c2e646 100644
--- a/cms/djangoapps/contentstore/features/course-export.feature
+++ b/cms/djangoapps/contentstore/features/course-export.feature
@@ -9,3 +9,11 @@ Feature: Course export
And I export the course
Then I get an error dialog
And I can click to go to the unit with the error
+
+ Scenario: User is directed to problem with & in it when export fails
+ Given I am in Studio editing a new unit
+ When I add a "Blank Advanced Problem" "Advanced Problem" component
+ And I edit and enter an ampersand
+ And I export the course
+ Then I get an error dialog
+ And I can click to go to the unit with the error
diff --git a/cms/djangoapps/contentstore/features/course-export.py b/cms/djangoapps/contentstore/features/course-export.py
index 2770c81b6d..b0b9845088 100644
--- a/cms/djangoapps/contentstore/features/course-export.py
+++ b/cms/djangoapps/contentstore/features/course-export.py
@@ -2,7 +2,7 @@
#pylint: disable=C0111
from lettuce import world, step
-from common import type_in_codemirror
+from component_settings_editor_helpers import enter_xml_in_advanced_problem
from nose.tools import assert_true, assert_equal
@@ -16,9 +16,7 @@ def i_export_the_course(step):
@step('I edit and enter bad XML$')
def i_enter_bad_xml(step):
- world.edit_component()
- type_in_codemirror(
- 0,
+ enter_xml_in_advanced_problem(step,
""" You want to make the smallest canvas you can.Smallest Canvas
Isn't the toy course great?
+Isn't the toy course great? &