【问题标题】:How to get and set text editor value in selenium如何在 selenium 中获取和设置文本编辑器值
【发布时间】:2014-05-02 05:18:25
【问题描述】:

我在网页上有文本编辑器,我需要使用 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>");

【问题讨论】:

  • 请发布您尝试过的内容。
  • @nitinchawda 请检查我更新的问题
  • 请更正您声明为变量的body。它应该是IWebElement 类型。你确定你的文本编辑器位于body 标签。请在此处发布 html。

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


【解决方案1】:

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

请通读这篇文章:Test WYSIWYG editors using Selenium WebDriver

  • 直接发送密钥

这种方法是您尝试过但没有奏效的方法。众所周知,Firefox 存在问题。您的代码应该适用于 PhantomJS 或 Chrome。请注意,&lt;span&gt;hiiiiiiii&lt;span&gt; 将在编辑器中生成实际文本,而不是 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>");

【讨论】:

  • @raman:你做了哪一个?描述发生了什么。如果有例外,请发布 stractrace。还需要说明你的 Selenium 版本、浏览器和浏览器版本。如果您自己的答案有效,那么这里的第二个答案也应该有效,除非您做错了什么。
【解决方案2】:
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

【讨论】:

    【解决方案3】:

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

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

    这对我有用.....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2022-08-16
      • 2020-03-04
      • 2022-12-06
      • 2013-05-28
      • 2010-09-14
      • 1970-01-01
      相关资源
      最近更新 更多