switchto switch java selenium iframe selenium-webdriver

java - switch - Cómo usar el comando SendKeys(webdriver) en el editor de texto enriquecido que se encuentra en iframe



selenium iframe python (1)

Me enfrenta el siguiente problema. No puedo escribir texto en iframe en el que hay un editor de texto: Aquí está el html:

<iframe class="cke_wysiwyg_frame cke_reset" frameborder="0" style="width: 100%; height: 100%;" aria-describedby="cke_39" title="Текстов редактор за форматиран текст,description1" src="" tabindex="0" allowtransparency="true"> <!DOCTYPE html> <html lang="bg" dir="ltr"> <head> <body class="cke_editable cke_editable_themed cke_contents_ltr" contenteditable="true" spellcheck="false"> <p> <br> </p> </body> </html> </iframe>

Esto es lo que he hecho hasta ahora, pero la prueba pasó con éxito y no se escribió texto en el editor de texto. Puede ser que la solución sea con el ejecutor de Javascript pero no estoy familiarizado con él.

WaitTool.waitForElementPresent(Browser.instance, By.tagName("iframe"), 10); WebElement iframe = Browser.instance.findElement(By.tagName("iframe")); Browser.instance.switchTo().frame(iframe); WebElement description=Browser.instance.findElement(By.xpath("//body[@class=''cke_editable cke_editable_themed cke_contents_ltr'']")); description.click(); description.sendKeys("someText"); Browser.instance.switchTo().defaultContent();

¡Gracias por adelantado!


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

  • Enviar claves directamente

Este enfoque es el que ha intentado y no ha funcionado. Intenta asegurarte de que tus localizadores en <iframe> y <body> sean correctos. De lo contrario, sugeriría usar JavaScriptExecutor para obtener soluciones más estables.

  • Establecer innerHTML

WaitTool.waitForElementPresent(Browser.instance, By.className("cke_wysiwyg_frame"), 10); WebElement iframe = Browser.instance.findElement(By.className("cke_wysiwyg_frame")); Browser.instance.switchTo().frame(iframe); WebElement description = Browser.instance.findElement(By.cssSelector("body")); (JavascriptExecutor)Browser.instance.executeScript("arguments[0].innerHTML = ''<h1>Set text using innerHTML</h1>''", description);

  • Use la API nativa de CKEditor

// no need to switch iframe (JavascriptExecutor)Browser.instance.executeScript("CKEDITOR.instances.ckeditor.setData(''<h1>Native API text</h1> Editor'')");