2014-05-02 14 views
4

我在网页上有文本编辑器,我需要使用c#中的selenium脚本来填充它的值。我知道如何为文本框做到这一点。我已经检查了从Set value in textbox的过程,但是当我尝试过相同的文本编辑器进程时,它不工作,我想要获取并设置编辑器的值。请帮助我,我该如何做到这一点。用于获取文本框的文本如何在selenium中获取和设置文本编辑器的值

代码:

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

请发表您已经尝试了什么。 –

+0

@nitinchawda请检查我更新的问题 –

+0

请更正您声明为变量的'body'。它应该是'IWebElement'类型。你确定你的文本编辑器是通过'body'标签来定位的吗?请在这里发布html。 –

回答

0

我用下面的代码来做到这一点:

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

这对我的工作.....

4
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

7

貌似你试图发送键给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>"); 
+0

我已经试过这个先生..但它没有为我工作..... –

+0

@raman:你做了哪一个?描述会发生什么。如果有例外,则发布stractrace。还需要说明您的Selenium版本,浏览器和浏览器版本。如果你自己的答案有效,那么这里的第二个答案也应该起作用,除非你做错了什么。 –

+0

我会尽快更新问题。 –

相关问题