0

次の構成で watir-classic 3.3.0 を実行しています。

  • ルビー 1.9.2p290
  • WATIRクラシック3.3.0
  • Windows XP サービス パック 3
  • IE8

テスト中のページの 1 つで次のスクリプトを実行しようとすると、エラーが発生します。

@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 が無効な文字で識別されないのか途方に暮れています。これを修正する方法について何か考えはありますか?

4

2 に答える 2

2

試すための IE8 はありませんが、IE8 で試していただけますか。

  • IE8 を開き、about:blank に移動します。
  • 開発者ツールを開き、[スクリプト] タブを開きます
  • 次のコマンドを実行します: typeof JSON
  • 次のコマンドを実行します: typeof JSON.stringify
  • 結果は?

これらのいずれかが未定義であるか、エラーが発生した場合、Watir はPageContainer#with_json2_if_neededで次のように json2.js を動的にロードしようとします。

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; }})()});
于 2013-01-05T14:19:40.720 に答える