Проблема с execute_script

Я использую watir-classic 3.3.0 со следующей конфигурацией:

  • рубин 1.9.2p290
  • watir-classic 3.3.0
  • Windows XP с пакетом обновления 3
  • IE 8

Когда я пытаюсь выполнить следующий скрипт на одной из тестируемых страниц, я получаю сообщение об ошибке

@browser.execute_script "window.confirm = function() { return true; }"

ОШИБКА:

WIN32OLERuntimeError: (in OLE method `execScript': )
OLE error code:80020101 in <Unknown>
  Could not complete the operation due to error 80020101.
HRESULT error code:0x80020009
  Exception occurred.
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/page-container.rb:46:in `method_missing'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/page-container.rb:46:in `rescue in execute_script'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/page-container.rb:39:in `execute_script'
    from (irb):7
    from C:/Ruby192/bin/irb:12:in `<main>'

Когда я смотрю в браузере на наличие ошибок Javascript, я получаю следующее:

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Timestamp: Thu, 3 Jan 2013 16:13:47 UTC


Message: Invalid character
Line: 1
Char: 1
Code: 0
URI: file:///C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/ext/json2.js


Message: 'JSON' is undefined
Line: 1
Char: 1
Code: 0
URI: http://iis01/XXX/employees/default.asp

ПРИМЕЧАНИЕ: я получаю это несколько раз в журнале ошибок IE Javascript.

Сайт не загружается с ошибками, и я не понимаю, почему JSON2 не идентифицирован с недопустимыми символами. Любая идея о том, как я могу это исправить?

2 ответа

У меня нет IE8 здесь, чтобы попробовать это, но вы можете попробовать это на вашем IE8.

  • Откройте IE8 и перейдите к: пусто.
  • Откройте Инструменты разработчика и откройте вкладку "Сценарий"
  • Запустите эту команду: typeof JSON
  • Запустите эту команду: typeof JSON.stringify
  • Каков результат?

Если какой-либо из них не определен или вы получаете ошибку, то Watir пытается динамически загрузить json2.js следующим образом в PageContainer # with_json2_if_needed:

if (!window.JSON || !window.JSON.stringify) {
  var json2=document.createElement('script');
  json2.type='text/javascript';
  json2.src='file:///C:/Ruby192/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/ext/json2.js'; 
  document.getElementsByTagName('head')[0].appendChild(json2)
}

Можете ли вы попробовать, что происходит, когда вы запускаете этот код вручную из инструментов разработчика?

Если это успешно, попробуйте запустить JSON.stringify тоже:

JSON.stringify({value: (function() {window.confirm = function() { return true; }})()});

Я попытался решить эту проблему, например, изменив многие настройки безопасности IE (v. 10 в моем случае). В общем, снятие "защищенного режима" работает, но тогда остальная часть Watir не работает (??). В любом случае, переход на CDN-версию json2.js работал. Вот патч обезьяны (я поместил в spec_helper.rb).

module Watir
  module PageContainer

    private

    def with_json2_if_needed source
      %Q[
  (function() {
    if (!window.JSON || !window.JSON.stringify) {
      var json2=document.createElement('script');
      json2.type='text/javascript';
      json2.src='https://cdnjs.cloudflare.com/ajax/libs/json2/20150503/json2.js';
      document.getElementsByTagName('head')[0].appendChild(json2)
    }
    return JSON.stringify({value: (function() {#{source}})()});
  })()
      ]
    end
  end
end
Другие вопросы по тегам