Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP


Small patch to make akephalos work on windows #53

wants to merge 2 commits into from

6 participants


The change in the call to IO.popen in remote_client.rb is taken from .

Additionally I had to replace ":" with File::PATH_SEPARATOR in two places in bin/akephalos.

With these changes, running a cucumber feature using akephalos works (tested on Windows 7). It leaves the command prompt in kind of a weird state, however. Not sure yet what's causing this – for now I just close and reopen the command prompt window, if necessary.


You're great, noniq. I hope this one gets pulled soon.


I tried the patch on a Windows XP machine. It runs (which is what I needed, of course). It still seems to have trouble closing the remote process. Apparently, the cause is line 65 in remote_client.rb:

  at_exit { Process.kill(:INT, }

Maybe this could be replaced with a check for the OS, and possibly use the kill() method from win32-process (see:

Already a very worthy patch even without fixing this.


Is there anything I can do to help get this integrated? I run cucumber on windows regularly using Capybara/SeleniumWD, and would like to switch to something headless.


+1 - this is currently blocking me too


@nusco: I played around with this today: Based on your suggestion it's possible to kill the remote (ruby) process, see
However, the java process still stays around … And this one is the real memory hog. Do you have ideas how this could be fixed?


Unfortunately I don't. :( Like many people here, I'm not really a Windows person - I just happen to have a lot of customers using Windows, so I had to goof around on Google looking for a solution. I think it boils down to get the id of the Java process on launch, right?


Another thing I've noticed in trying to get this to run on Cygwin/Win7 is that the "rescue Errno::ECONNREFUSED" big in the self.responsive? function is not catching Win7's new/different error:
Errno::EPERM: Operation not permitted - connect(2)


taskkill can be used to kill the ruby process and the child java process that it creates.

system("taskkill /PID #{} /F /T")

fairly new to ruby so no idea if this is the best solution.


We recently replaced our development machines with Macs, so this is no longer a issue for us – I leave the pull request open however, as it is at least a small improvent to the status quo :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Feb 14, 2011
  1. @noniq

    Make Akephalos work on windows.

    noniq authored
Commits on Jan 27, 2012
  1. @noniq


    noniq authored
This page is out of date. Refresh to see the latest.
Showing with 5 additions and 87 deletions.
  1. +2 −84
  2. +2 −2 bin/akephalos
  3. +1 −1  lib/akephalos/remote_client.rb
@@ -1,86 +1,4 @@
-# Akephalos
-Akephalos is a full-stack headless browser for integration testing with
-Capybara. It is built on top of [HtmlUnit](,
-a GUI-less browser for the Java platform, but can be run on both JRuby and
-MRI with no need for JRuby to be installed on the system.
+This fork is no longer maintained.
-## Installation
+Please refer to for information about the (tiny) changes we did in this fork.
- gem install akephalos
-## Setup
-Configuring akephalos is as simple as requiring it and setting Capybara's
-javascript driver:
- require 'akephalos'
- Capybara.javascript_driver = :akephalos
-## Basic Usage
-Akephalos provides a driver for Capybara, so using Akephalos is no
-different than using Selenium or Rack::Test. For a full usage guide, check
-out Capybara's DSL [documentation]( It
-makes no assumptions about the testing framework being used, and works with
-RSpec, Cucumber, and Test::Unit.
-Here's some sample RSpec code:
- describe "Home Page" do
- before { visit "/" }
- context "searching" do
- before do
- fill_in "Search", :with => "akephalos"
- click_button "Go"
- end
- it "returns results" { page.should have_css("#results") }
- it "includes the search term" { page.should have_content("akephalos") }
- end
- end
-## Configuration
-There are now a few configuration options available through Capybara's new
-`register_driver` API.
-### Using a different browser
-HtmlUnit supports a few browser implementations, and you can choose which
-browser you would like to use through Akephalos. By default, Akephalos uses
-Firefox 3.6.
- Capybara.register_driver :akephalos do |app|
- # available options:
- # :ie6, :ie7, :ie8, :firefox_3, :firefox_3_6
-, :browser => :ie8)
- end
-### Ignoring javascript errors
-By default HtmlUnit (and Akephalos) will raise an exception when an error
-is encountered in javascript files. This is generally desireable, except
-that certain libraries aren't supported by HtmlUnit. If possible, it's
-best to keep the default behavior, and use Filters (see below) to mock
-offending libraries. If needed, however, you can configure Akephalos to
-ignore javascript errors.
- Capybara.register_driver :akephalos do |app|
-, :validate_scripts => false)
- end
-## More
-* [bin/akephalos](
- allows you to start an interactive shell or DRb server, as well as perform
- other maintenance features.
-* [Filters]( allows
- you to declare mock responses for external resources and services requested
- by the browser.
-## Resources
-* [API Documentation](
-* [Source code]( and
- [issues]( are hosted on
- github.
4 bin/akephalos
@@ -68,12 +68,12 @@ else
java_args = [
- "-cp", [JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path].join(":"),
+ "-cp", [JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path].join(File::PATH_SEPARATOR),
ruby_args = [
- "-I", "vendor:#{lib}:#{src}",
+ "-I", ["vendor", lib, src].join(File::PATH_SEPARATOR),
"-r", "akephalos/server",
"-e", "Akephalos::Server.start!(#{port.inspect})"
2  lib/akephalos/remote_client.rb
@@ -46,7 +46,7 @@ def self.manager
def self.start!
port = find_available_port
- remote_client = IO.popen("#{Akephalos::BIN_DIR + 'akephalos'} #{port}")
+ remote_client = IO.popen("ruby #{Akephalos::BIN_DIR + 'akephalos'} #{port}")
# Set up a monitor thread to detect if the forked server exits
# prematurely.
Something went wrong with that request. Please try again.