我在zombie.js测试框架和Google Maps API方面遇到了问题。
我有一个简单的zombie.js,它加载一个主页并尝试单击一个登录链接。但是,当我查看主页HTML返回的内容时(从zombie.js浏览器对象的角度来看),我只在body部分看到以下内容:
<body>
<script src="https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/12/main.js" type="text/javascript"></script>
</body>如果我从原始页面中删除Google Maps javascript,一切都会正常工作,并且我会得到完整的部分。请求一个不使用maps API的不同页面也可以正常工作。
我在这里看到了一个相关的问题,但解决方法并没有完全描述:https://github.com/assaf/zombie/issues/250
有人能帮我解决这个问题吗?
下面是有问题的zombie.js代码:
suite('Zombie Sign In', function() {
test('Home page should have sign-in link', function(done) {
var browser = new Browser();
browser.debug = true;
browser.authenticate().basic(conf.basicAuth.username, conf.basicAuth.password);
browser.visit(conf.baseURL, function(e, browser) {
console.log(browser.html()); // here is where I get the empty body section
browser.clickLink("Sign In", function() {
browser.text("title").should.eql('my title');
done();
});
});
});
});发布于 2012-10-16 14:29:51
我今天遇到了这个问题-你只需要异步加载API即可。与其说这是一种变通办法,不如说是一种有文档记录的替代方案,你可以在这里阅读:
https://developers.google.com/maps/documentation/javascript/tutorial#asynch
本质上,您只需要像这样更改任何代码:
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=SET_TO_TRUE_OR_FALSE" type="text/javascript"></script>
<script type="text/javascript">
function initialize() {
var map = new google.maps.Map(/* ... */);
}
window.onload = initialize();
</script>(几乎完全从上面的链接中删除):
<script type="text/javascript">
function initialize() {
var map = new google.maps.Map(/* ... */);
}
function loadScript() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=TRUE_OR_FALSE&callback=initialize";
document.body.appendChild(script);
}
window.onload = loadScript;
</script>这里要注意的关键一点是,你必须将一个回调参数传递给script.src标签(在这个例子中,我们提供了initialize,但它可以是你想要的任何东西)-这将让谷歌在动态注入的地图脚本标签完成加载时触发你的初始化代码。
第二种机制修复了我的僵尸测试。
https://stackoverflow.com/questions/11813036
复制相似问题