无法使用Selenium WebDriver将Keys()发送到TinyMCE

问题描述 投票:5回答:3

我在Eclipse中使用Selenium WebDriver,我正在尝试将文本插入到网页上的tinymce框中。这是我正在使用的代码。

//find tinymce iframe
editorFrame = driver.findElement(By.cssSelector(".col_right iframe"));

//switch to iframe
driver.switchTo().frame(editorFrame);
driver.findElement(By.className("mceContentBody")).sendKeys("YOOOO");
driver.switchTo().defaultContent();

光标在编辑器内闪烁,但不发送任何文本。我也尝试过这种轻微的变化而没有任何运气。

//find tinymce iframe
editorFrame = driver.findElement(By.cssSelector(".col_right iframe"));  

//switch to iframe
driver.switchTo().frame(editorFrame);
WebElement body = driver.findElement(By.className("mceContentBody"));
body.sendKeys("YOOOO");
driver.switchTo().defaultContent();
java selenium tinymce selenium-webdriver wysiwyg
3个回答
5
投票

是的,正如理查德所说,这是How to input text into tinceMCE editior using selenium/webdriver的副本。

对于您的具体代码,我建议

  • 尝试使用mceContentBody的不同定位器,例如使用By.cssSelector(".mceContentBody")By.cssSelector("body")等。
  • 在发送密钥之前先单击正文。
driver.findElement(By.tagName("body")).click().sendKeys("YOOOO");
  • 设置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);
  • 使用TinyMCE的原生API
// no need to switch iframe
(JavascriptExecutor)driver.executeScript("tinyMCE.activeEditor.setContent('<h1>Native API text</h1> TinyMCE')");

进一步阅读:Test WYSIWYG editors using Selenium WebDriver


1
投票

这样做(c#)

yourWebDriver.ExecuteScript(string.Format("tinyMCE.getInstanceById('{0}').setContent('{1}');",yourWebElement.GetAttribute("id"), "hello world"));

0
投票

用于写入tinymce编辑器的代码段:

注意 - 我不会建议返回void来写入编辑器方法,但为了简单起见将其保留在这里 -

public void writeTextToEditor(String text) {
   WebElement iframe = 
   driver().findElements(By.tagName(UtilTexts.HTML_ELEMENT_IFRAME)).get(0);

   driver().switchTo().frame(iframe);// something to look for when using timymce
   txt_editorBoxSupportArticle.click(); // if the focus is not on the editor window by default you have to perform click.
   txt_editorBoxSupportArticle.sendKeys(text);

   getDriverForCurrentThread().switchTo().defaultContent();
}

从tinymce编辑器中读取的片段:

public String readTextFromEditor() {
    @FindBy(how = How.ID, using = ("tinymce"))
    private WebElement txt_editorBoxSupportArticle;

    WebElement iframe = 
    driver().findElements(By.tagName(UtilTexts.HTML_ELEMENT_IFRAME)).get(0);

    driver().switchTo().frame(iframe);
    String articleDesc = txt_editorBoxSupportArticle.getText();
    getDriverForCurrentThread().switchTo().defaultContent();
    return articleDesc;
}

上面的代码片段已经过测试。虽然我也建议尝试使用TinyMCE的原生API。

如果您觉得有用,请分享您的想法。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.