diff --git a/common/test/acceptance/pages/studio/html_component_editor.py b/common/test/acceptance/pages/studio/html_component_editor.py index eb661239af..287a44a36c 100644 --- a/common/test/acceptance/pages/studio/html_component_editor.py +++ b/common/test/acceptance/pages/studio/html_component_editor.py @@ -7,25 +7,62 @@ class HtmlComponentEditorView(ComponentEditorView): """ Represents the rendered view of an HTML component editor. """ - def set_content_and_save(self, content): + + editor_mode_css = '.edit-xblock-modal .editor-modes .editor-button' + + def set_content_and_save(self, content, raw=False): + """Types content into the html component and presses Save. + + Arguments: + content (str): The content to be used. + raw (bool): If true, edits in 'raw HTML' mode. """ - Types content into the html component and presses Save. - """ - self.set_content(content) + if raw: + self.set_raw_content(content) + else: + self.set_content(content) + self.save() - def set_content_and_cancel(self, content): + def set_content_and_cancel(self, content, raw=False): + """Types content into the html component and presses Cancel to abort. + + Arguments: + content (str): The content to be used. + raw (bool): If true, edits in 'raw HTML' mode. """ - Types content into the html component and presses Cancel to abort the change. - """ - self.set_content(content) + if raw: + self.set_raw_content(content) + else: + self.set_content(content) + self.cancel() def set_content(self, content): + """Types content into the html component, leaving the component open. + + Arguments: + content (str): The content to be used. """ - Types content into the html component, leaving the component open. - """ - self.q(css='.edit-xblock-modal .editor-modes .editor-button').click() - editor = self.q(css=self._bounded_selector('.html-editor .mce-edit-area'))[0] + self.q(css=self.editor_mode_css).click() + + selector = '.html-editor .mce-edit-area' + editor = self.q(css=self._bounded_selector(selector))[0] ActionChains(self.browser).click(editor).\ - send_keys([Keys.CONTROL, 'a']).key_up(Keys.CONTROL).send_keys(content).perform() + send_keys([Keys.CONTROL, 'a']).key_up(Keys.CONTROL).\ + send_keys(content).perform() + + def set_raw_content(self, content): + """Types content in raw html mode, leaving the component open. + + Arguments: + content (str): The content to be used. + """ + self.q(css=self.editor_mode_css).click() + self.q(css='[aria-label="Edit HTML"]').click() + + #Focus goes to the editor by default + ActionChains(self.browser).send_keys([Keys.CONTROL, 'a']).\ + key_up(Keys.CONTROL).send_keys(content).perform() + + self.q(css='.mce-foot .mce-primary').click() diff --git a/common/test/acceptance/tests/studio/test_studio_container.py b/common/test/acceptance/tests/studio/test_studio_container.py index 2eebe98730..d8cde09d77 100644 --- a/common/test/acceptance/tests/studio/test_studio_container.py +++ b/common/test/acceptance/tests/studio/test_studio_container.py @@ -293,6 +293,24 @@ class EditContainerTest(NestedVerticalTest): container = self.go_to_nested_container_page() self.modify_display_name_and_verify(container) + def test_edit_raw_html(self): + """ + Test the raw html editing functionality. + """ + modified_content = "

modified content

" + + #navigate to and open the component for editing + unit = self.go_to_unit_page() + container = unit.xblocks[1].go_to_container() + component = container.xblocks[1].children[0] + component.edit() + + html_editor = HtmlComponentEditorView(self.browser, component.locator) + html_editor.set_content_and_save(modified_content, raw=True) + + #note we're expecting the

tags to have been removed + self.assertEqual(component.student_content, "modified content") + class EditVisibilityModalTest(ContainerBase): """