我正在尝试使用Selenium/Webdriver自动将一些文字插入使用tinymce
创建的文本框中文本框不是普通的香草文本框,因此以下操作不起作用:
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");
就像纯文本框https://code.google.com/p/selenium/wiki/GettingStarted
一样正常以下是截图如何在浏览器的元素选项卡中看到textarea元素的位置: http://imageshack.com/a/img812/9341/1zau.png
注意:通过selenium,我无法在'embedded'html doc中找到任何元素(我找不到元素错误)
我发现python相当于上面做的,但是,仍然希望在我的java代码中完成它:
browser.execute_script("tinyMCE.activeEditor.setContent('{}')".format(testTextVar))
答案 0 :(得分:6)
有多种方法可以做到这一点。这是一篇你可能想看的文章。
Test WYSIWYG editors using Selenium WebDriver
下面的代码片段未经过测试,仅提供Java中的逻辑。
inputWebDriver.switchTo().frame("input-data_ifr");
WebElement element = inputWebDriver.findElement(By.cssSelector("body"));
element.sendKeys("Send keys");
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);
// no need to switch iframe
(JavascriptExecutor)driver.executeScript("tinyMCE.activeEditor.setContent('<h1>Native API text</h1> TinyMCE')");
答案 1 :(得分:1)
该元素位于iframe内部。
您需要使用:
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");
然后在完成后使用以下内容切换回文档的顶部。
inputWebDriver.switchTo().defaultContent();
答案 2 :(得分:0)
从上面的@ user1177636回答中,我发现 - 在Firefox驱动程序中 - 我只能得到&#34;使用TinyMCE的原生API&#34;工作的选择。但是,这真的不是我想要的,因为它会用提供给该API方法的字符串覆盖文本框中的所有内容。这对我来说是不利的,因为我在编辑器中有一堆我不想丢失的内容。
但是,我很高兴地通知您,只需使用activeEditor.selection.setContent就可以简单地插入一些文本而不是覆盖所有文本。是的,那个额外的选择&#34;是我需要的。
所以,这是我的解决方案,这只是@ user1177636上面的tinyMce API的一个小变化,它预先设置了单词&#34;更改了! &#34;:
((JavascriptExecutor)driver).executeScript("tinyMCE.activeEditor.selection.setContent('changed! ')");
不要忘记,您需要使用此导入才能正常工作
import org.openqa.selenium.JavascriptExecutor;
希望这可以帮助那些可能会遇到同样困境的人并节省他们一些时间(只要我发现这一点就不必打猎)。