From noreply at rubyforge.org Sun Sep 13 07:13:28 2009 From: noreply at rubyforge.org (noreply at rubyforge.org) Date: Sun, 13 Sep 2009 07:13:28 -0400 (EDT) Subject: [Celerity-development] [ celerity-Patches-27095 ] browser page serialize Message-ID: <20090913111328.AFADE18581FA@rubyforge.org> Patches item #27095, was opened at 2009-09-13 11:13 You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=24035&aid=27095&group_id=6198 Category: None Group: None Status: Open Resolution: None Priority: 3 Submitted By: jason franklin-stokes (jasonrails) Assigned to: Nobody (None) Summary: browser page serialize Initial Comment: enables the user to serialize and deserialize a page object. methods serialize_page and deserialize_page added to class browser. simple test added to rspec tests. serialize and deserialize remove and add web_window_event before executing so that it does not get in the way of serialization. listener class method remove_listener actively removes the web_window_event listener from the webclient (removeWebWindowListener). NOTE: I am not sure how or if the following listeners and handlers effect the page serialization: setStatusHandler(self) setAlertHandler(self) setAttachmentHandler(self) setHTMLParserListener(self) setIncorrectnessListener(self) setConfirmHandler(self) setPromptHandler(self) But in the general case removing the WebWindowListener works. >From ec70deb926e85b12c25a0db5866ed0f315a9e1fe Mon Sep 17 00:00:00 2001 From: jason franklin-stokes Date: Sun, 13 Sep 2009 12:46:34 +0200 Subject: [PATCH] browser page serialize --- .gitignore | 4 +++- lib/celerity/browser.rb | 11 +++++++++++ lib/celerity/htmlunit.rb | 1 + lib/celerity/listener.rb | 5 +++++ spec/browser_spec.rb | 9 +++++++++ 5 files changed, 29 insertions(+), 1 deletions(-) diff --git a/.gitignore b/.gitignore index 241a0c2..c09e42e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ log/** doc classes .yardoc -pkg \ No newline at end of file +pkg +.diff +.DS_Store diff --git a/lib/celerity/browser.rb b/lib/celerity/browser.rb index d9be7e2..b00e4df 100644 --- a/lib/celerity/browser.rb +++ b/lib/celerity/browser.rb @@ -83,6 +83,17 @@ module Celerity short_inspect :exclude => %w[@webclient @browser @object @options @listener @event_listener] end + def serialize_page + listener.remove_listener(:web_window_event, @event_listener) + SerializationUtils.serialize(@page).to_a.pack("C*") + end + + def deserialize_page(_serialized_page) + @page = SerializationUtils.deserialize(_serialized_page.to_java_bytes) + listener.add_listener(:web_window_event, &@event_listener) + @page + end + # # Goto the given URL # diff --git a/lib/celerity/htmlunit.rb b/lib/celerity/htmlunit.rb index 974289b..e94b387 100644 --- a/lib/celerity/htmlunit.rb +++ b/lib/celerity/htmlunit.rb @@ -3,6 +3,7 @@ module Celerity Jars.each { |jar| require(jar) } include_class org.apache.commons.httpclient.Cookie + include_class org.apache.commons.lang.SerializationUtils module JsxHelper def method_missing(meth, *args, &blk) diff --git a/lib/celerity/listener.rb b/lib/celerity/listener.rb index c5ce71f..a1c30fd 100644 --- a/lib/celerity/listener.rb +++ b/lib/celerity/listener.rb @@ -62,6 +62,11 @@ module Celerity else raise TypeError, "must give proc or index" end + + case type + when :web_window_event + @webclient.removeWebWindowListener(self) if @procs[type].length == 0 + end end # diff --git a/spec/browser_spec.rb b/spec/browser_spec.rb index 4dc45c9..fc7cb0b 100644 --- a/spec/browser_spec.rb +++ b/spec/browser_spec.rb @@ -297,4 +297,13 @@ describe "Browser" do end end + describe "#serialize" do + it "should serialize and deserialize page" do + b = Browser.new + b.goto(WatirSpec.files + "/forms_with_input_elements.html") + serialized = b.serialize_page + b.deserialize_page(serialized).should be_a_kind_of Java::ComGargoylesoftwareHtmlunitHtml::HtmlPage + end + end + end -- 1.6.4.2 ---------------------------------------------------------------------- You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=24035&aid=27095&group_id=6198