如何在selenium中获取和设置文本编辑器值

时间:2014-05-02 05:18:25

标签: c# asp.net selenium selenium-webdriver editor

我在网页上有文本编辑器,我需要在c#中使用selenium脚本填充其值。我知道怎么做文本框。我已经从Set value in textbox检查了这个过程但是当我为文本编辑器尝试了相同的过程时,它不起作用,我想得到并设置编辑器的值。请帮帮我怎么做。

获取文本框文本的代码是:

IWebDriver firefoxDriver = new FirefoxDriver();
IWebElement passwordTextBox = Driver.FindElement(By.Id("passwordTextBox"));
passwordTextBox.Clear();
passwordTextBox.SendKeys("password");

我已尝试使用以下代码设置编辑器的值

IWebElement detailFrame = driver.FindElement(By.CssSelector("#cke_1_contents .cke_wysiwyg_frame"));
driver.SwitchTo().Frame(detailFrame);
Thread.Sleep(1000);
var body = driver.FindElement(By.TagName("body")); // then you find the body
Thread.Sleep(1000);
body.SendKeys("<span>hiiiiiiii<span>");

3 个答案:

答案 0 :(得分:8)

看起来你正在尝试向CKEditor发送密钥。

请仔细阅读以下文章:Test WYSIWYG editors using Selenium WebDriver

  • 直接发送密钥

这种方法是你尝试过但不起作用的方法。众所周知,Firefox存在问题。您的代码适用于PhantomJS或Chrome。请注意,<span>hiiiiiiii<span>将导致编辑器中的实际文本,而不是span元素。

  • 设置innerHTML
IWebElement detailFrame = driver.FindElement(By.CssSelector("#cke_1_contents .cke_wysiwyg_frame"));
driver.SwitchTo().Frame(detailFrame);

var body = driver.FindElement(By.TagName("body")); // then you find the body

var executor = driver as IJavaScriptExecutor;
executor.ExecuteScript("arguments[0].innerHTML = '<span>hiiiiiiii<span>'", body);
  • 使用CKEditor的原生API
var executor = driver as IJavaScriptExecutor;
executor.ExecuteScript("CKEDITOR.instances.ckeditor.setData('<span>hiiiiiiii<span>");

答案 1 :(得分:7)

IWebDriver firefoxDriver = new FirefoxDriver();
IWebElement passwordTextBox = Driver.FindElement(By.Id("passwordTextBox"));
passwordTextBox.Clear();
passwordTextBox.SendKeys("password");

在上面的代码中将第二行更改为

IWebElement passwordTextBox = firefoxDriver.FindElement(By.Id("passwordTextBox"));

同时检查您正在搜索的元素的ID By.Id("passwordTextBox")是否正确其他明智的使用xpath / css

答案 2 :(得分:2)

我使用以下代码执行此操作:

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
        js.ExecuteScript("document.getElementsByClassName('cke_wysiwyg_frame')[0].contentDocument.getElementsByClassName('cke_editable_themed')[0].innerHTML='dfjkbgdk';");

这对我有用.....