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

本文关键字:置文本 编辑器 获取 selenium | 更新日期: 2023-09-27 18:01:09

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

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

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>");

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

看起来您正在尝试将密钥发送到CKEditor。

请阅读本文:使用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>");
IWebDriver firefoxDriver = new FirefoxDriver();
IWebElement passwordTextBox = Driver.FindElement(By.Id("passwordTextBox"));
passwordTextBox.Clear();
passwordTextBox.SendKeys("password");

在上述代码中,将第2行更改为

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

此外,请检查您正在搜索的元素的id By.Id("passwordTextBox")是否正确,否则请使用xpath/css-

我使用了以下代码来实现这一点:

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

这对我来说很好…