如何在selenium webdriver中的富文本编辑器中输入文本?

时间:2016-10-13 14:16:22

标签: internet-explorer selenium iframe selenium-webdriver textarea

我们的应用程序中有一个富文本编辑器,我们正在自动使用selenium。下面是相同的html。

<iframe style="height: 76px; width: 1004px;"></iframe>
<html><head></head><body spellcheck="false"></body></html>
<head></head>
<body spellcheck="false"></body>
<html><head></head><body spellcheck="false"></body></html>
<iframe style="height: 76px; width: 1004px;"></iframe>
<div class=""><iframe style="height: 76px; width: 1004px;"></iframe></div>
<textarea class="form-control Editor" name="actionUpdate" id="actionUpdateId" style="display: none;"></textarea>

我尝试了多种选择。以下代码在Chrome浏览器上完美运行

driver.switchTo().frame(0);
WebElement el  =  driver.switchTo().activeElement();
new Actions(driver).moveToElement(el).perform();
driver.findElement(By.xpath("/html/body")).sendKeys("Check");

然而它在IE11浏览器上不起作用,因为它无法使用xpath找到元素。 两种浏览器之间的区别在于,当我使用IE在文本字段中键入内容时,它会转到textarea标记。但是在chrome中,它在body标签中输入。我尝试使用ID =&#34; actionUpdateID&#34;找到元素。在IE中,它会抛出一个异常,说元素没有显示,可能是因为style =&#34; display:none;&#34;

3 个答案:

答案 0 :(得分:1)

JavaScriptExecutor是处理富文本框的更好方法。只需切换到正确的iframe,然后将innerHtml设置为该iframe的主体。

WebElement text= driver.findElement(By.cssSelector("body")); (JavascriptExecutor)driver.executeScript("arguments[0].innerHTML = 'Set text using innerHTML'", text);

答案 1 :(得分:0)

由于在您的应用程序中手动输入文本会进入 textarea 元素,您可以尝试使用 sendKeys 将值设置为selenium中的 textarea 元素。
使用 selenium textarea 元素中设置某个值时,相同的值将添加到Web应用程序中的富文本编辑器中。

但根据您的HTML代码, textarea 元素的样式为 display:none ,因为您的 selenium 代码会抛出 sendKeys 到元素时>例外。如果 display 属性更改为 inline block ,则可以修复此问题。

因此,您首先需要将 textarea 的样式设置为 display:inline ,然后使用 sendKeys 为元素设置一些值。

使用 JavascriptExecutor 更改 textarea 元素的样式:

((JavascriptExecutor)driver).executeScript("document.getElementsByName('actionUpdate')[0].style.display='inline'");

要为 富文本编辑器 设置一些值,请使用以下代码:

driver.findElement(By.name("actionUpdate")).sendKeys("Show this message in rich text editor");

答案 2 :(得分:0)

感谢Himanshi 我通过您的方法解决了这个问题。这是我的代码。

driver.execute_script("document.getElementsByName('description')[0].style.display='inline'")
driver.execute_script("document.getElementsByName('description')[0].style.visibility='visible'")