diff --git a/common/lib/capa/capa/templates/matlabinput.html b/common/lib/capa/capa/templates/matlabinput.html
index 63187f214b..ce61e38808 100644
--- a/common/lib/capa/capa/templates/matlabinput.html
+++ b/common/lib/capa/capa/templates/matlabinput.html
@@ -39,7 +39,7 @@
+
${queue_msg|n}
@@ -51,6 +51,7 @@
diff --git a/common/test/acceptance/pages/lms/matlab_problem.py b/common/test/acceptance/pages/lms/matlab_problem.py
new file mode 100644
index 0000000000..c75b80fc57
--- /dev/null
+++ b/common/test/acceptance/pages/lms/matlab_problem.py
@@ -0,0 +1,43 @@
+"""
+Matlab Problem Page.
+"""
+from bok_choy.page_object import PageObject
+
+
+class MatlabProblemPage(PageObject):
+ """
+ View of matlab problem page.
+ """
+
+ url = None
+
+ def is_browser_on_page(self):
+ return self.q(css='.ungraded-matlab-result').present
+
+ @property
+ def problem_name(self):
+ """
+ Return the current problem name.
+ """
+ return self.q(css='.problem-header').text[0]
+
+ def set_response(self, response_str):
+ """
+ Input a response to the prompt.
+ """
+ input_css = "$('.CodeMirror')[0].CodeMirror.setValue('{}');".format(response_str)
+ self.browser.execute_script(input_css)
+
+ def click_run_code(self):
+ """
+ Click the run code button.
+ """
+ self.q(css='input.save').click()
+ self.wait_for_ajax()
+
+ def get_grader_msg(self, class_name):
+ """
+ Returns the text value of given class.
+ """
+ self.wait_for_ajax()
+ return self.q(css=class_name).text
diff --git a/common/test/acceptance/tests/test_matlab_problem.py b/common/test/acceptance/tests/test_matlab_problem.py
new file mode 100644
index 0000000000..d2e7e9d90a
--- /dev/null
+++ b/common/test/acceptance/tests/test_matlab_problem.py
@@ -0,0 +1,118 @@
+# -*- coding: utf-8 -*-
+"""
+E2E tests for the LMS.
+"""
+import time
+
+from .helpers import UniqueCourseTest
+from ..pages.studio.auto_auth import AutoAuthPage
+from ..pages.lms.courseware import CoursewarePage
+from ..pages.lms.matlab_problem import MatlabProblemPage
+from ..fixtures.course import CourseFixture, XBlockFixtureDesc
+from ..fixtures.xqueue import XQueueResponseFixture
+from textwrap import dedent
+
+
+class MatlabProblemTest(UniqueCourseTest):
+ """
+ Tests that verify matlab problem "Run Code".
+ """
+ USERNAME = "STAFF_TESTER"
+ EMAIL = "johndoe@example.com"
+
+ def setUp(self):
+ super(MatlabProblemTest, self).setUp()
+
+ self.XQUEUE_GRADE_RESPONSE = None
+
+ self.courseware_page = CoursewarePage(self.browser, self.course_id)
+
+ # Install a course with sections/problems, tabs, updates, and handouts
+ course_fix = CourseFixture(
+ self.course_info['org'], self.course_info['number'],
+ self.course_info['run'], self.course_info['display_name']
+ )
+
+ problem_data = dedent("""
+
+
+
+ Write MATLAB code to create the following row vector and store it in a variable named V.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ """)
+
+ course_fix.add_children(
+ XBlockFixtureDesc('chapter', 'Test Section').add_children(
+ XBlockFixtureDesc('sequential', 'Test Subsection').add_children(
+ XBlockFixtureDesc('problem', 'Test Matlab Problem', data=problem_data)
+ )
+ )
+ ).install()
+
+ # Auto-auth register for the course.
+ AutoAuthPage(self.browser, username=self.USERNAME, email=self.EMAIL,
+ course_id=self.course_id, staff=False).visit()
+
+ def _goto_matlab_problem_page(self):
+ """
+ Open matlab problem page with assertion.
+ """
+ self.courseware_page.visit()
+ matlab_problem_page = MatlabProblemPage(self.browser)
+ self.assertEqual(matlab_problem_page.problem_name, 'TEST MATLAB PROBLEM')
+ return matlab_problem_page
+
+ def test_run_code(self):
+ """
+ Test "Run Code" button functionality.
+ """
+
+ # Enter a submission, which will trigger a pre-defined response from the XQueue stub.
+ self.submission = "a=1" + self.unique_id[0:5]
+
+ self.XQUEUE_GRADE_RESPONSE = {'msg': self.submission}
+
+ matlab_problem_page = self._goto_matlab_problem_page()
+
+ # Configure the XQueue stub's response for the text we will submit
+ if self.XQUEUE_GRADE_RESPONSE is not None:
+ XQueueResponseFixture(self.submission, self.XQUEUE_GRADE_RESPONSE).install()
+
+ matlab_problem_page.set_response(self.submission)
+ matlab_problem_page.click_run_code()
+
+ self.assertEqual(
+ u'Submitted. As soon as a response is returned, this message will be replaced by that feedback.',
+ matlab_problem_page.get_grader_msg(".external-grader-message")[0]
+ )
+
+ # Wait 5 seconds for xqueue stub server grader response sent back to lms.
+ time.sleep(5)
+
+ self.assertEqual(u'', matlab_problem_page.get_grader_msg(".external-grader-message")[0])
+ self.assertEqual(
+ self.XQUEUE_GRADE_RESPONSE.get("msg"),
+ matlab_problem_page.get_grader_msg(".ungraded-matlab-result")[0]
+ )