From 7ca382a952afed431b4e99d672eeeaa2278b70e7 Mon Sep 17 00:00:00 2001 From: Anastasia Smirnova Date: Sun, 25 Feb 2018 23:12:59 -1200 Subject: [PATCH 1/2] Added support for getValue and setValue in RichTextAreaElement Resolves #8114 --- .../elements/RichTextAreaElement.java | 57 +++++++++++++++++++ .../elements/ComponentElementGetValue.java | 28 ++++----- .../AbstractTextElementSetValue.java | 16 +++--- .../ComponentElementGetValueTest.java | 21 +++---- .../AbstractTextElementSetValueTest.java | 16 ++++-- 5 files changed, 95 insertions(+), 43 deletions(-) diff --git a/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java b/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java index 4228d9192b6..cbd7a4112d7 100644 --- a/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java +++ b/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java @@ -15,6 +15,7 @@ */ package com.vaadin.testbench.elements; +import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebElement; import com.vaadin.testbench.By; @@ -33,4 +34,60 @@ public class RichTextAreaElement extends AbstractFieldElement { public WebElement getEditorIframe() { return findElement(By.tagName("iframe")); } + + /** + * Return value of the field element. + * + * @return value of the field element + * @since + */ + public String getValue() { + JavascriptExecutor executor= (JavascriptExecutor)getDriver(); + return executor.executeScript("" + + "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + + "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + + "return body.innerHTML;").toString(); + } + + /** + * Set value of the field element. + * + * @param chars + * new value of the field + *@since + */ + public void setValue(CharSequence chars) throws ReadOnlyException { + if (isReadOnly()) { + throw new ReadOnlyException(); + } + clearElementClientSide(); + focus(); + JavascriptExecutor executor= (JavascriptExecutor)getDriver(); + executor.executeScript("" + + "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + + "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + + "body.innerHTML=arguments[0]; \n" + + "var ev = document.createEvent('HTMLEvents');\n" + + "ev.initEvent('change', true, false); \n" + + "body.dispatchEvent(ev);", chars); + } + + private void clearElementClientSide(){ + waitForVaadin(); + JavascriptExecutor executor= (JavascriptExecutor)getDriver(); + executor.executeScript("" + + "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + + "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + + "body.innerHTML=\"\"; \n"); + } + + @Override + public void focus(){ + waitForVaadin(); + JavascriptExecutor executor= (JavascriptExecutor)getDriver(); + executor.executeScript("" + + "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + + "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + + "body.focus();"); + } } diff --git a/uitest/src/main/java/com/vaadin/tests/elements/ComponentElementGetValue.java b/uitest/src/main/java/com/vaadin/tests/elements/ComponentElementGetValue.java index 2bfc9540a35..5ffd8f5bba5 100644 --- a/uitest/src/main/java/com/vaadin/tests/elements/ComponentElementGetValue.java +++ b/uitest/src/main/java/com/vaadin/tests/elements/ComponentElementGetValue.java @@ -21,27 +21,12 @@ import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; -import com.vaadin.ui.AbstractTextField; -import com.vaadin.ui.CheckBox; -import com.vaadin.ui.CheckBoxGroup; -import com.vaadin.ui.ComboBox; -import com.vaadin.ui.Component; -import com.vaadin.ui.DateField; -import com.vaadin.ui.Label; -import com.vaadin.ui.ListSelect; -import com.vaadin.ui.MultiSelect; -import com.vaadin.ui.NativeSelect; -import com.vaadin.ui.PasswordField; -import com.vaadin.ui.RadioButtonGroup; -import com.vaadin.ui.Slider; -import com.vaadin.ui.TextArea; -import com.vaadin.ui.TextField; -import com.vaadin.ui.TwinColSelect; +import com.vaadin.ui.*; /** * UI test for getValue() method of components: TextField, TextArea, * PasswordField, ComboBox, ListSelect, NativeSelect, OptionGroup, CheckBox, - * DateField, TwinColSelect + * DateField, TwinColSelect, RichTextArea * * @since * @author Vaadin Ltd @@ -52,6 +37,7 @@ public class ComponentElementGetValue extends AbstractTestUI { public static final int TEST_SLIDER_VALUE = 42; public static final float TEST_FLOAT_VALUE = 0.42f; public static final LocalDate TEST_DATE_VALUE = LocalDate.now(); + public static final String TESTGET_STRING_VALUE_RICHTEXTAREA = "value 4"; DateField df; final Label valueChangeLabel = new Label("Initial value"); @@ -121,7 +107,7 @@ protected void setup(VaadinRequest request) { event -> valueChangeLabel.setValue(value)); addComponent(field); } - + addComponent(createRichTextArea()); addComponent(createCheckBox()); addComponent(createSlider()); addComponent(createDateField()); @@ -153,6 +139,12 @@ private CheckBox createCheckBox() { return cb; } + private RichTextArea createRichTextArea() { + RichTextArea rta=new RichTextArea(); + rta.setValue(TESTGET_STRING_VALUE_RICHTEXTAREA); + return rta; + } + @Override protected String getTestDescription() { return "Field elements getValue() should return test value"; diff --git a/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java b/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java index 09b6fcf02bb..63020d16a88 100644 --- a/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java +++ b/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java @@ -19,13 +19,7 @@ import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; -import com.vaadin.ui.AbstractField; -import com.vaadin.ui.AbstractTextField; -import com.vaadin.ui.DateField; -import com.vaadin.ui.Label; -import com.vaadin.ui.PasswordField; -import com.vaadin.ui.TextArea; -import com.vaadin.ui.TextField; +import com.vaadin.ui.*; /** * @@ -53,6 +47,7 @@ protected void setup(VaadinRequest request) { addValueChangeListener(comps[i], i); addComponent(comps[i]); addComponent(eventCountLabels[i]); + addComponent(createRichTextArea()); } @@ -81,6 +76,13 @@ private DateField createDateField() { return df; } + private RichTextArea createRichTextArea() { + RichTextArea rta=new RichTextArea(); + rta.setValue(INITIAL_VALUE); + return rta; + } + + @Override protected String getTestDescription() { return "Test type method of AbstractTextField components"; diff --git a/uitest/src/test/java/com/vaadin/tests/elements/ComponentElementGetValueTest.java b/uitest/src/test/java/com/vaadin/tests/elements/ComponentElementGetValueTest.java index bd1ea57eaf0..94c1872b742 100644 --- a/uitest/src/test/java/com/vaadin/tests/elements/ComponentElementGetValueTest.java +++ b/uitest/src/test/java/com/vaadin/tests/elements/ComponentElementGetValueTest.java @@ -21,21 +21,10 @@ import java.util.Collections; import java.util.List; +import com.vaadin.testbench.elements.*; import org.junit.Before; import org.junit.Test; -import com.vaadin.testbench.elements.AbstractTextFieldElement; -import com.vaadin.testbench.elements.CheckBoxElement; -import com.vaadin.testbench.elements.CheckBoxGroupElement; -import com.vaadin.testbench.elements.ComboBoxElement; -import com.vaadin.testbench.elements.DateFieldElement; -import com.vaadin.testbench.elements.ListSelectElement; -import com.vaadin.testbench.elements.NativeSelectElement; -import com.vaadin.testbench.elements.PasswordFieldElement; -import com.vaadin.testbench.elements.RadioButtonGroupElement; -import com.vaadin.testbench.elements.TextAreaElement; -import com.vaadin.testbench.elements.TextFieldElement; -import com.vaadin.testbench.elements.TwinColSelectElement; import com.vaadin.tests.tb3.MultiBrowserTest; public class ComponentElementGetValueTest extends MultiBrowserTest { @@ -130,6 +119,14 @@ public void checkDateField() { assertEquals(expected, actual); } + @Test + public void checkRichTextArea(){ + RichTextAreaElement elem= $(RichTextAreaElement.class).first(); + String expected=ComponentElementGetValue.TESTGET_STRING_VALUE_RICHTEXTAREA; + String actual=elem.getValue(); + assertEquals(expected,actual); + } + private void checkValue(AbstractTextFieldElement elem) { String expected = ComponentElementGetValue.TEST_STRING_VALUE; String actual = elem.getValue(); diff --git a/uitest/src/test/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValueTest.java b/uitest/src/test/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValueTest.java index e1b9960908c..e44f5c47d64 100644 --- a/uitest/src/test/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValueTest.java +++ b/uitest/src/test/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValueTest.java @@ -17,15 +17,11 @@ import static org.junit.Assert.assertEquals; +import com.vaadin.testbench.elements.*; +import com.vaadin.tests.elements.ComponentElementGetValue; import org.junit.Before; import org.junit.Test; -import com.vaadin.testbench.elements.AbstractTextFieldElement; -import com.vaadin.testbench.elements.DateFieldElement; -import com.vaadin.testbench.elements.LabelElement; -import com.vaadin.testbench.elements.PasswordFieldElement; -import com.vaadin.testbench.elements.TextAreaElement; -import com.vaadin.testbench.elements.TextFieldElement; import com.vaadin.tests.tb3.MultiBrowserTest; /** @@ -69,6 +65,14 @@ public void dateFieldSetValue() { assertEquals(TYPED_STRING, elem.getValue()); } + @Test + public void richTextAreaSetValue(){ + RichTextAreaElement elem=$ (RichTextAreaElement.class).get(0); + elem.setValue(TYPED_STRING); + String actual=elem.getValue(); + assertEquals(TYPED_STRING,actual); + } + // helper methods // checks that setValue method works private void checkType(AbstractTextFieldElement elem, From 011abe05599ec27a4f975928f38679ebe5511b99 Mon Sep 17 00:00:00 2001 From: Anastasia Smirnova Date: Mon, 26 Feb 2018 00:21:22 -1200 Subject: [PATCH 2/2] Use correct syntax to get the exact RTAElement --- .../elements/RichTextAreaElement.java | 27 ++++--------------- .../AbstractTextElementSetValue.java | 1 - 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java b/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java index cbd7a4112d7..681912bc488 100644 --- a/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java +++ b/testbench-api/src/main/java/com/vaadin/testbench/elements/RichTextAreaElement.java @@ -43,10 +43,7 @@ public WebElement getEditorIframe() { */ public String getValue() { JavascriptExecutor executor= (JavascriptExecutor)getDriver(); - return executor.executeScript("" + - "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + - "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + - "return body.innerHTML;").toString(); + return executor.executeScript("return arguments[0].contentDocument.body.innerHTML",getEditorIframe()).toString(); } /** @@ -60,34 +57,20 @@ public void setValue(CharSequence chars) throws ReadOnlyException { if (isReadOnly()) { throw new ReadOnlyException(); } - clearElementClientSide(); focus(); JavascriptExecutor executor= (JavascriptExecutor)getDriver(); executor.executeScript("" + - "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + - "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + - "body.innerHTML=arguments[0]; \n" + + "var bodyE=arguments[0].contentDocument.body;\n" + + "bodyE.innerHTML=arguments[1]; \n" + "var ev = document.createEvent('HTMLEvents');\n" + "ev.initEvent('change', true, false); \n" + - "body.dispatchEvent(ev);", chars); - } - - private void clearElementClientSide(){ - waitForVaadin(); - JavascriptExecutor executor= (JavascriptExecutor)getDriver(); - executor.executeScript("" + - "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + - "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + - "body.innerHTML=\"\"; \n"); + "bodyE.dispatchEvent(ev);",getEditorIframe(), chars); } @Override public void focus(){ waitForVaadin(); JavascriptExecutor executor= (JavascriptExecutor)getDriver(); - executor.executeScript("" + - "var richTextArea = document.getElementsByClassName(\"v-richtextarea\");\n" + - "var body = richTextArea[0].querySelector(\"iframe\").contentDocument.body;\n" + - "body.focus();"); + executor.executeScript("arguments[0].contentDocument.body.focus();",getEditorIframe()); } } diff --git a/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java b/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java index 63020d16a88..1f5c60b9c99 100644 --- a/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java +++ b/uitest/src/main/java/com/vaadin/tests/elements/abstracttextfield/AbstractTextElementSetValue.java @@ -82,7 +82,6 @@ private RichTextArea createRichTextArea() { return rta; } - @Override protected String getTestDescription() { return "Test type method of AbstractTextField components";