Ivan's Blog

Vague mumblings about all sorts of things. Java, Agile, Open Source...

Sunday, July 30, 2006

Buildix - continous integration onnadisk

I spotted this post on Martin Fowler's Bliki which struck me as a great idea - everything you need for continuous integration on a Live CD or a VM Ware image. I'm going to give the VM Ware one a go under Qemu, once I have converted the image to suit Qemu. Buildix uses SVN, Trac, can CruiseContol. At work we use CVS, Sirid and Cruisecontrol respectively. I have considered switching to SVN and Trac partially for their close integration (that CVS and Sirid do not have) and depending on how buildix goes it may well be the catalist I need to finally switch.

Labels:

Thursday, July 13, 2006

Firewatir performance

A bit of googling found this page list entry about firewatir performance. http://www.mail-archive.com/wtr-general@rubyforge.org/msg03317.html

Labels:

Monday, July 03, 2006

FireWatir and Linux

Below shows how I ran Waitr on Linux (Fedora Core 5), attached to a browser via url, navigated to one url and then navigated back.

First of we need a version of FireFox with JSSH installed in it. I only managed this with a build from source.


cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot login
cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/client.mk
cd mozilla
make -f client.mk checkout MOZ_CO_PROJECT=browser
cvs up -r ZAP_20050610_BRANCH extensions/jssh
cat > .mozconfig

=== snip
. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_CO_PROJECT=browser
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/fx-jssh
ac_add_options --enable-extensions=default,jssh
=== end snip

make -f client.mk build

Then I waited, in fact I went out shopping, because it takes a while on my Athlon XP 2700+. Once it did complete I fired up firefox and did a quick sanity test to check connectivity with jssh.


./fx-jssh/dist/bin/firefox -jssh

$> telnet localhost 9997

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Welcome to the Mozilla JavaScript Shell!


Now to get FireWatir up and going.

Get the latest version of watir from svn, then get the firefox branch.

svn co http://svn.openqa.org/svn/watir/trunk
svn co http://svn.openqa.org/svn/watir/branches/firefox


Copy the firefox version over the normal version.
cp -r firefox/code/* trunk/watir/

I ran this quick little example


$LOAD_PATH << '/home/ivan/work/firewatir/firewatir/mix'

require 'watir'
include Watir b = Firefox.new()
b.attach(:url, 'http://www.groklaw.net/')
b.goto('http://xtra.co.nz')
b.goto('http://www.groklaw.net')


With this unfortunate output :(


$ ruby browsertest.rb
/home/ivan/work/firewatir/firewatir/mix/watir/win32ole/win32ole.so: /home/ivan/work/firewatir/firewatir/mix/watir/win32ole/win32ole.so: invalid ELF header - /home/ivan/work/firewatir/firewatir/mix/watir/win32ole/win32ole.so (LoadError)
from /home/ivan/work/firewatir/firewatir/mix/watir.rb:141
from browsertest.rb:5


Not suprisingly the stuff that ties into Windows' COM objects didn't want to work on Linux so I then hacked watir.rb and made these changes:

--- firefox/code/watir.rb 2006-07-04 13:33:12.000000000 +1200
+++ mix/watir.rb 2006-07-11 22:52:56.000000000 +1200
@@ -138,10 +138,11 @@
# Use our modified win32ole library
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'watir', 'win32ole')

-require 'win32ole'
+mswin = /mswin/ =~ RUBY_PLATFORM
+require 'win32ole' if mswin
require 'logger'
-require 'watir/winClicker'
-require 'watir/WindowHelper'
+require 'watir/winClicker' if mswin
+require 'watir/WindowHelper' if mswin
require 'watir/exceptions'
require 'container'

@@ -478,9 +479,12 @@
private :attach_browser_window

# this will find the IEDialog.dll file in its build location
- @@iedialog_file = (File.expand_path(File.dirname(__FILE__)) + "/watir/IEDialog/Release/IEDialog.dll").gsub('/', '\\')
- @@fnFindWindowEx = Win32API.new('user32.dll', 'FindWindowEx', ['l', 'l', 'p', 'p'], 'l')
- @@fnGetUnknown = Win32API.new(@@iedialog_file, 'GetUnknown', ['l', 'p'], 'v')
+
+ if /mswin/ =~ RUBY_PLATFORM
+ @@iedialog_file = (File.expand_path(File.dirname(__FILE__)) + "/watir/IEDialog/Release/IEDialog.dll").gsub('/', '\\')
+ @@fnFindWindowEx = Win32API.new('user32.dll', 'FindWindowEx', ['l', 'l', 'p', 'p'], 'l')
+ @@fnGetUnknown = Win32API.new(@@iedialog_file, 'GetUnknown', ['l', 'p'], 'v')
+ end

def self.attach_modal(title)
hwnd_modal = 0


And re-ran the example and watched firefox wander its merry way around the internet :)

Hopefully more to follow...

UPDATE:
After all that fun I found this page http://people.mozilla.com/~davel/jssh/ though I haven't tried it yet this should cut out a lot of effort.

Labels: