我正在使用以下配置运行watir-classic 3.3.0:
当我尝试在我测试的其中一个页面上执行以下脚本时,出现错误
@browser.execute_script "window.confirm = function() { return true; }"
ERROR:
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无法识别无效字符。关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
我这里没有IE8可以尝试,但你可以在你的IE8上试试吗。
如果其中任何一个未定义或者出现错误,那么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; }})()});
答案 1 :(得分:0)
我尝试了很多东西来解决这个问题,比如修改许多IE(在我的案例中为10)安全设置。一般起飞&#34;保护模式&#34;有效,但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