Как вывести HTML-страницу в виде XML с Watir & JavaScript? - PullRequest
0 голосов
/ 23 июля 2011

Я пытался создать простой сценарий в 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: в 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 'из test.rb: 9: в `'

, если я введу эту строку:

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

в поле местоположения FF, я получаю страницу с желаемым XML.поэтому XMLSerializer должен быть где-то определен, его JS-код кажется просто недосягаемым.

как мне заставить это работать?

Ответы [ 2 ]

1 голос
/ 29 июля 2011

В сущности, я подозреваю, что это может быть связано с границами «песочницы», в которой работает javascript. Сам браузер может знать о сериализаторе, но не может предоставить javascript доступ к этому.

Тем не менее, может быть несколько способов снять кожу с кошки. Если ваш второй фрагмент кода предоставляет вам страницу, которая отображается как текст в синтаксисе XML, почему бы не сделать это сначала, а затем просто использовать полученную страницу с помощью

puts browser.text
1 голос
/ 25 июля 2011

Не уверен, что вы подразумеваете под "адресным окном", но если это адресная строка (та, которая говорит http://stackoverflow.com/... на этой странице), то попробуйте это:

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