Как получить и установить значение текстового редактора в селене
У меня есть текстовый редактор на веб-странице, мне нужно заполнить его значение с помощью сценариев селена в 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