如何使用selenium / webdriver将文本输入到tinceMCE editior中
我正在尝试使用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");
喜欢纯文本框可以正常工作http://sofzh.miximages.com/java/selenium-google-code-issue-archive
注意:通过selenium,我无法在’embedded’html doc中找到任何元素(我得到元素未找到错误)
我发现一个python等同于上面完成,但是,仍然希望在我的java代码中完成它:
browser.execute_script("tinyMCE.activeEditor.setContent('{}')".format(testTextVar))
有多种方法可以做到这一点。 这是一篇你可能想看的文章。
使用Selenium WebDriver测试WYSIWYG编辑器
下面的代码片段未经过测试,仅提供Java中的逻辑。
- 直接发送密钥。 与理查德的答案相同。
inputWebDriver.switchTo().frame("input-data_ifr"); WebElement element = inputWebDriver.findElement(By.cssSelector("body")); element.sendKeys("Send keys");
- 设置innerHTML
inputWebDriver.switchTo().frame("input-data_ifr"); WebElement element = inputWebDriver.findElement(By.cssSelector("body")); (JavascriptExecutor)driver.executeScript("arguments[0].innerHTML = 'Set text using innerHTML
'", element);
- 使用TinyMCE的原生API
// no need to switch iframe (JavascriptExecutor)driver.executeScript("tinyMCE.activeEditor.setContent('Native API text
TinyMCE')");
该元素位于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();
从@ user1177636上面的答案,我发现 – 在Firefox驱动程序中 – 我只能使用“使用TinyMCE的本机API”选项。 但是,这真的不是我想要的,因为这将覆盖文本框中的所有内容,并提供给该API方法的字符串。 这对我来说是不利的,因为我在编辑器中有很多内容我不想丢失。
但是,我很高兴地通知您,只需使用activeEditor.selection.setContent就可以简单地插入一些文本而不是覆盖所有文本。 是的,那个额外的“选择”就是我所需要的。
所以,这是我的解决方案,这只是上面的@ user1177636的tinyMce API的一个小变化,其前面加上“已更改!”这个词:
((JavascriptExecutor)driver).executeScript("tinyMCE.activeEditor.selection.setContent('changed! ')");
不要忘记你需要这个导入才能工作
import org.openqa.selenium.JavascriptExecutor;
希望这可以帮助那些可能有同样困境的人,并节省他们一些时间(不必像我一样去寻找这个)。