usar texto limitar example definicion componentes como java selenium tinymce selenium-webdriver wysiwyg

texto - limitar textarea java



Cómo ingresar texto en el editor de tinceMCE usando selenio/webdriver (3)

Intento insertar automáticamente texto usando Selenium / Webdriver en un cuadro de texto creado con tinymce

El cuadro de texto no es un simple cuadro de texto vainilla, entonces el siguiente no funciona:

System.out.println("Finding text input element"); WebElement element = inputWebDriver.findElement(By.xpath("//html/body/div/form/div/div/div[2]")); //not working //WebElement element = inputWebDriver.findElement(By.tagName("form")); // not working //WebElement element = inputWebDriver.findElement(By.id("tinymce")); // not working System.out.println("Entering something in text input"); element.sendKeys("Test text");

funciona bien con el cuadro de texto sin formato https://code.google.com/p/selenium/wiki/GettingStarted

Aquí está la captura de pantalla de cómo se ve la ubicación del elemento textarea en la pestaña de elementos del navegador: http://imageshack.com/a/img812/9341/1zau.png

Nota: a través del selenio, no puedo obtener ningún elemento dentro del documento html ''incrustado'' (obtengo el error de elemento no encontrado)

He encontrado un equivalente de python para hacer arriba, pero aún estoy buscando hacerlo en mi código de Java:

browser.execute_script("tinyMCE.activeEditor.setContent(''{}'')".format(testTextVar))


El elemento está dentro de un iframe.

Necesitarás usar:

inputWebDriver.switchTo().frame("input-data_ifr"); WebElement element = inputWebDriver.findElement(By.id("tinymce")); System.out.println("Entering something in text input"); element.sendKeys(Keys.CONTROL + "a"); element.sendKeys("Test text");

Luego, use lo siguiente para volver a la parte superior del documento cuando haya terminado.

inputWebDriver.switchTo().defaultContent();


Desde la respuesta anterior de @ user1177636, descubrí que, en el controlador de Firefox, solo podía hacer funcionar la opción "Usar la API nativa de TinyMCE". Sin embargo, eso realmente no era lo que quería porque eso sobrescribía todo en el cuadro de texto con la cadena proporcionada a ese método API. Eso fue perjudicial para mí ya que tenía un montón de contenido en el editor que no quería perder.

Sin embargo, me complace informarle que el simple uso de activeEditor.selection.setContent hace que simplemente inserte texto en lugar de sobrescribirlo todo. Yeap, esa "selección" extra es lo que necesitaba.

Entonces, aquí está mi solución, que es solo una pequeña variación de la API tinyMce de @ user1177636 que se encuentra arriba y que antecede a la palabra "¡cambiado!":

((JavascriptExecutor)driver).executeScript("tinyMCE.activeEditor.selection.setContent(''changed! '')");

No olvide que necesitará esta importación para que funcione

import org.openqa.selenium.JavascriptExecutor;

Espero que esto ayude a alguien más que pueda tener la misma situación que yo y les ahorre algo de tiempo (no tener que cazar mientras descubrí esto).


Hay múltiples formas de hacerlo. Aquí hay un artículo que quizás quieras echarle un vistazo.

Pruebe los editores WYSIWYG que usan Selenium WebDriver

Los fragmentos de código a continuación no se prueban, solo proporcionan la lógica en Java.

  • Enviar claves directamente Igual que la respuesta de Richard arriba .

inputWebDriver.switchTo().frame("input-data_ifr"); WebElement element = inputWebDriver.findElement(By.cssSelector("body")); element.sendKeys("Send keys");

  • Establecer innerHTML

inputWebDriver.switchTo().frame("input-data_ifr"); WebElement element = inputWebDriver.findElement(By.cssSelector("body")); (JavascriptExecutor)driver.executeScript("arguments[0].innerHTML = ''<h1>Set text using innerHTML</h1>''", element);

  • Usa la API nativa de TinyMCE

// no need to switch iframe (JavascriptExecutor)driver.executeScript("tinyMCE.activeEditor.setContent(''<h1>Native API text</h1> TinyMCE'')");