我一直在尝试在FireWatir中创建一个简单的脚本,该脚本会将整个当前文档DOM(包括javascript生成的代码)转换为XML表示形式。

以下网络上的线索我想出了这个脚本

require 'rubygems'
require 'firewatir'


browser = Watir::Browser.new
browser.goto('http://www.google.com/')
browser.text_field(:id, 'lst-ib').set('hello')
browser.button(:name, 'btnG').click
puts browser.execute_script("new XMLSerializer().serializeToString(document)")


但是,在Firefox 3.6中运行它会导致以下错误:

c:/Ruby192/lib/ruby/gems/1.9.1/gems/firewatir-1.9.2/lib/firewatir/jssh_socket.rb
:19:in js_eval': XMLSerializer is not defined (JsshSocket::JSReferenceError) from c:/Ruby192/lib/ruby/gems/1.9.1/gems/firewatir-1.9.2/lib/firewatir/firefox.rb:136:in execute_script'from test.rb:9:in`'

如果我输入这一行:

javascript:window.open('aout:blank').document.write('<pre>' + unescape((new     XMLSerializer()).serializeToString(document).replace(/</g, '&lt;')) + '</pre>')


进入FF位置框,我得到一个包含所需XML的页面。因此XMLSerializer必须在某处定义,对于我的JS代码而言似乎不可行。

我该如何工作?

最佳答案

不确定“位置框”是什么意思,但是如果那是地址栏(在此页面上显示http://stackoverflow.com/...的地址栏),请尝试以下操作:

browser.goto "javascript:window.open('aout:blank').document.write('<pre>' + unescape((new     XMLSerializer()).serializeToString(document).replace(/</g, '&lt;')) + '</pre>')"

关于javascript - 如何使用watir和JavaScript将HTML页面转储为XML?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6802593/

10-11 13:27