I had to deal with JavaScript Undefined Error while accessing a specific CKEditor instance to fill in text.
Ensure everything is loaded with
patiently do
  page.execute_script("return isCkeditorLoaded('#{selector}');").should be_true
end
Example
The fill in text snippet for Cucumber:
When /^I fill in the "([^\"]+)" WYSIWYG editor with:$/ do |selector, html|
  patiently do
    page.execute_script("return isCkeditorLoaded('#{selector}');").should be_true
  end
  html.gsub!(/\n+/, "") # otherwise: unterminated string literal (Selenium::WebDriver::Error::JavascriptError)
  page.execute_script("CKEDITOR.instances['#{selector}'].setData('#{html}');")
end
The snippet for JavaScript:
function isCkeditorLoaded(instance_selector) {
  // instance_selector is e.g. 'template_html'
  var status;
  if (window.CKEDITOR && CKEDITOR.instances && CKEDITOR.instances[instance_selector]) {
    status = CKEDITOR.instances[instance_selector].status;
  }
  return status === 'ready';
};
Posted by Martin Straub to makandra dev (2014-02-21 10:15)