Как получить и установить значение текстового редактора в селене

У меня есть текстовый редактор на веб-странице, мне нужно заполнить его значение с помощью сценариев селена в C#. Я знаю, как сделать это для текстового поля. Я проверил процесс из " Задать значение в текстовом поле", но когда я попробовал тот же процесс для текстового редактора, он не работает, я хочу получить и установить значение редактора. Пожалуйста, помогите мне, как я могу это сделать.

код для получения текста текстового поля:

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 ответа

Решение

Я использовал следующий код для этого:

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

это работа для меня.....

Похоже, вы пытаетесь отправить ключи в CKEditor.

Пожалуйста, прочитайте эту статью: Тестируйте WYSIWYG-редакторы с помощью 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);
  • Используйте собственный API CKEditor
var executor = driver as IJavaScriptExecutor;
executor.ExecuteScript("CKEDITOR.instances.ckeditor.setData('<span>hiiiiiiii<span>");
IWebDriver firefoxDriver = new FirefoxDriver();
IWebElement passwordTextBox = Driver.FindElement(By.Id("passwordTextBox"));
passwordTextBox.Clear();
passwordTextBox.SendKeys("password");

В приведенном выше коде измените вторую строку на

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

Также проверьте идентификатор элемента, который вы ищете By.Id("passwordTextBox") правильно другое мудрое использование xpath/css

Другие вопросы по тегам