Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Small patch to make akephalos work on windows #53

Open
wants to merge 2 commits into from

6 participants

@noniq

The change in the call to IO.popen in remote_client.rb is taken from https://github.com/bernerdschaefer/akephalos/issues#issue/18/comment/485887 .

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.

@nusco

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

@nusco

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, remote_client.pid) }

Maybe this could be replaced with a check for the OS, and possibly use the kill() method from win32-process (see: https://rubyforge.org/docman/view.php/85/707/README.html).

Already a very worthy patch even without fixing this.

@petemounce

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.

@searls

+1 - this is currently blocking me too

@noniq

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

@nusco

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?

@whitelancer

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)

@kieranmaine

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

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

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

@noniq

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

    Update README.md

    noniq authored
This page is out of date. Refresh to see the latest.
Showing with 5 additions and 87 deletions.
  1. +2 −84 README.md
  2. +2 −2 bin/akephalos
  3. +1 −1  lib/akephalos/remote_client.rb
View
86 README.md
@@ -1,86 +1,4 @@
-# Akephalos
-Akephalos is a full-stack headless browser for integration testing with
-Capybara. It is built on top of [HtmlUnit](http://htmlunit.sourceforge.net),
-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 https://github.com/bernerdschaefer/akephalos/pull/53 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](http://github.com/jnicklas/capybara). 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
- Capybara::Driver::Akephalos.new(app, :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|
- Capybara::Driver::Akephalos.new(app, :validate_scripts => false)
- end
-
-## More
-
-* [bin/akephalos](http://bernerdschaefer.github.com/akephalos/akephalos-bin.html)
- allows you to start an interactive shell or DRb server, as well as perform
- other maintenance features.
-
-* [Filters](http://bernerdschaefer.github.com/akephalos/filters.html) allows
- you to declare mock responses for external resources and services requested
- by the browser.
-
-## Resources
-
-* [API Documentation](http://bernerdschaefer.github.com/akephalos/api)
-* [Source code](http://github.com/bernerdschaefer/akephalos) and
- [issues](http://github.com/bernerdschaefer/akephalos/issues) are hosted on
- github.
View
4 bin/akephalos
@@ -68,12 +68,12 @@ else
java_args = [
"-Xmx128M",
- "-cp", [JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path].join(":"),
+ "-cp", [JRubyJars.core_jar_path, JRubyJars.stdlib_jar_path].join(File::PATH_SEPARATOR),
"org.jruby.Main"
]
ruby_args = [
"-Ku",
- "-I", "vendor:#{lib}:#{src}",
+ "-I", ["vendor", lib, src].join(File::PATH_SEPARATOR),
"-r", "akephalos/server",
"-e", "Akephalos::Server.start!(#{port.inspect})"
]
View
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.