From 8821d64a15c0200d920ac94da844568ed0034306 Mon Sep 17 00:00:00 2001 From: Tarek Oraby <42799254+tarekoraby@users.noreply.github.com> Date: Fri, 8 May 2020 15:46:59 +0300 Subject: Fix RTA's CreateLink in Firefox & IE11 (#11979) In Firefox and IE11, the 'Create Link' button of the RichTextArea (RTA) only works by turning some highlighted text into a link (by adding the inserted URI as the href property of the text). In that, the RTA in these two browsers behave similarly to the way it does in Chrome and Edge. However, in Firefox and IE11, clicking the 'Create Link' button has no effect if no text is pre-selected by the user. This is different from the button's behavior in Chrome and Edge where the user's provided URI is inserted, both, as the displayed text and its href property if no text is highlighted. This fix enables the RTA's 'Create Link' button to work consistently across the supported browsers. Specifically, (and in addition to enabling adding the href property of a highlighted text), this fix enables Firefox and IE11 to also insert a new Uri as a text and its href property if no text is already highlighted. fixes #11888 --- .../richtextarea/RichTextAreaCreateLinkTest.java | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java (limited to 'uitest/src/test/java/com/vaadin/tests') diff --git a/uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java b/uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java new file mode 100644 index 0000000000..c93079b83e --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/richtextarea/RichTextAreaCreateLinkTest.java @@ -0,0 +1,77 @@ +package com.vaadin.tests.components.richtextarea; + +import static org.junit.Assert.assertTrue; + +import java.time.Duration; + +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.Alert; +import org.openqa.selenium.By; +import org.openqa.selenium.Keys; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.FluentWait; +import org.openqa.selenium.support.ui.Wait; + +import com.vaadin.testbench.elements.RichTextAreaElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +public class RichTextAreaCreateLinkTest extends MultiBrowserTest { + + private static final Duration PROMPT_POLLING_INTERVAL = Duration + .ofSeconds(5); + private static final Duration PROMPT_TIMEOUT_INTERVAL = Duration + .ofSeconds(30); + private static final String TESTING_URI = "https://vaadin.com/"; + private static final String TESTING_TEXT = "Vaadin company name"; + + RichTextAreaElement rta; + + @Before + public void init() { + openTestURL(); + rta = $(RichTextAreaElement.class).first(); + } + + @Test + public void createLinkButtonShouldInsertUriAsTextAndHrefIfNoTextIsHighlighted() { + createLinkViaButton(rta, TESTING_URI); + String expected = "" + TESTING_URI + + ""; + assertTrue(String.format( + "RichTextArea's expected value is: %s. However, the following value was received: %s.", + expected, rta.getValue()), rta.getValue().equals(expected)); + } + + @Test + public void createLinkButtonShouldAddUriAsHrefIfTextIsHighlighted() { + rta.setValue(TESTING_TEXT); + WebElement textArea = rta.findElement(By.className("gwt-RichTextArea")); + textArea.sendKeys(Keys.CONTROL, "a"); + createLinkViaButton(rta, TESTING_URI); + String expected = "" + TESTING_TEXT + + ""; + assertTrue(String.format( + "RichTextArea's expected value is: %s. However, the following value was received: %s.", + expected, rta.getValue()), rta.getValue().equals(expected)); + } + + private void createLinkViaButton(RichTextAreaElement rta, String Uri) { + rta.findElement(By.cssSelector("div[title='Create Link']")).click(); + + Wait wait = new FluentWait(driver) + .withTimeout(PROMPT_TIMEOUT_INTERVAL) + .pollingEvery(PROMPT_POLLING_INTERVAL) + .ignoring(NoSuchElementException.class); + + // Wait for the alert to be displayed and store it in a variable + Alert alert = wait.until(ExpectedConditions.alertIsPresent()); + // Type the URI + alert.sendKeys(Uri); + // Press the OK button + alert.accept(); + } +} -- cgit v1.2.3