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

时间:2014-02-11 21:25:02

标签: java selenium tinymce selenium-webdriver wysiwyg

我在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();

3 个答案:

答案 0 :(得分: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 :(得分:1)

这样做(c#)

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

答案 2 :(得分: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。

如果有帮助,请分享您的想法。

谢谢