Rajeeshcv.com

Sharing my knowledge

Automating WYSIWYG editors using Selenium web driver

Automating web application using selenium for acceptance/integration tests is very easy. Recently I have faced few issues when automating a page with a JavaScript based WYSIWYG editors.

The reason why it is hard because most of these editors create a new editable HTML document inside an iframe. There are two ways I aware that you can set text on these editors

  1. Executing a JavaScript code in the current page
  2. Sending keys on the editable iframe

Here is how I automated two WYSIWYG editors using selenium web driver.

bootstrap-wysihtml5


private void SetBootstrapWysihtml5Content(IWebElement textArea, string content)
{
    string script = string.Format(@"$('#{0}').data('wysihtml5').editor.setValue('{1}');", textArea.GetAttribute("id"), content);
    ((IJavaScriptExecutor)this.WebDriver).ExecuteScript(script);
}

What this method does is, it accepts the TextArea web element which you are converting to an editor and the actual content to be set. Then it executes a piece of JavaScript on the current WebDriver context.

For e.g. if you have a TextArea element with id “summary” then executing below JavaScript statement will insert a “Test” as h1 tag to the editor

$('#summary').data('wysihtml5').editor.setValue('<h1>Test</h1>');

TinyMCE

private void SetTinyMCEContent(IWebElement textArea, string content)
{
    string textAreaId = textArea.GetAttribute("id");
    string frameId = string.Format("{0}_ifr", textAreaId);
    var frame = this.WebDriver.FindElement(By.Id(frameId));
    this.WebDriver.SwitchTo().Frame(frame);
    ((IJavaScriptExecutor)this.WebDriver).ExecuteScript("document.body.innerHTML = '" + content + "'");
    this.WebDriver.SwitchTo().DefaultContent();
}

This method also accepts the TextArea web element which you are converting to an editor and the actual content to be set. Then it finds the corresponding iframe and set the innerHTML by executing a JavaScript statement.

Introducing SourceCodeReader

Have you ever tried to understand a project just by going through the source code?

That’s how I do most of the time, till now I haven’t seen any up to date documentation which gives the clear understanding of how the code is implemented. In reality after a certain period during the development, documentation goes out of sync with the source code. So some one joins the project lately has only one way to understand the project “Go through the source code

Sometimes I go through the open source projects hosted on either Github, Codeplex or Google code. All the hosting site provide you with a user interface for browsing through the source code with syntax highlighting support, which is nice. The problem I had with this is – if I see a object creation statement, method call there is no way for me to find out how it is implemented other than manually going through the files and finding it out.

Most of the full blown editors provide a feature where you can navigate to the implementation directly from where it is used for e.g. Microsoft Visual Studio provides “Go To Definition” feature. I find this feature very much useful for understanding the project. Only draw back with this approach is you have to completely get the latest version of source code to your local machine.

SourceCodeReader is trying solve this navigation problem on the web. With this application you can open a project and browse through the files with code navigation support.

Source code for this project can be found at https://github.com/cvrajeesh/SourceCodeReader

Limitations

  1. Now supports only Github code repository
  2. Only supports .Net C#  projects, other type of projects also works without code navigation support

* Caution: This is an early release you will see bumpy roads.

 

How to use this application

 

Go to SourceCodeReader and enter the URL of a C# project on Github

image

 

Once you have entered a Github project link and open the project, it get the source code from the Github and present you with file browser.

image

 

When you navigate to a C# file you will be able to see clickable links for identifiers which takes you the file location where that is declared.

image

 

Sample projects

  1. http://sourcecodereader.apphb.com/#/open/cvrajeesh/SourceCodeReader
  2. http://sourcecodereader.apphb.com/#/open/ayende/ravendb

Hope you liked this idea, please provide me with your valuable feedback.

Attach to Any ASP.NET Web Server from Visual Studio in One Click

This is an update to my previous blog post Attach to Visual Studio Development Server with One Click.

The Visual Studio Macro from previous article doesn’t support IISExpress or IIS; it only supported the Visual Studio Development Server, more over it doesn’t detect latest Development Web Server “WebDev.WebServer40.exe”.

Now I have updated the Macro so that it will automatically detect the Web Server setting from the project properties and attach it accordingly.

Read more...

Attach to Visual Studio Development Server with One Click

Update: Enhanced version of the Macro created here is available in the new article -  Attach to Any ASP.NET Web Server from Visual Studio in One Click

In my day to day work, during the development I had to attach an ASP.NET application to the development server (Cassini) several times in order to debug and fix a problem.

This task is little bit time consuming because this is how we normally do it

  1. Click on the “Attach to Process” menu under the Debug menu
  2. Select the correct process from the list of available processes
  3. Either double click on the select process or click the “Attach” button

You can reduce these into two steps, if you assign a short cut key to the “Attach to Process” command.

What I found is most of the time is lost in finding and selecting the correct process from the available list of processes in the “Attach to Process” dialog.

Read more...