Google Maps APIを使用するアプリケーションをテストするために、Seleniumを使用してアクセプタンステストを作成しています。マップマーカーの配置をテストするために、私はusing un-optimized markersであり、マーカーエレメント(SeleniumからXPathクエリー)をターゲットにするための一意のタイトル属性です。Google Maps Unimimimized Marker/fitBounds
google.maps.Map.fitBoundsを(呼び出しここで私が問題に遭遇してきた)はマーカーが最適化されていないマーカーが使用されているDOMから削除されます。これを行うには、fitBounds()を繰り返し呼び出す必要があります。 これは最適化されていないマーカーでのみ発生し、アプリケーション自体は期待通りに機能します。
私は、ブラウザで複製する短いテストスクリプトを書いている:以下を実行してください。
私もcreate a fiddleをしました。
私はAPIドキュメントには何も関係がないことを見てきました。
助けがあれば助かります。
<html>
<head>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>
<style type="text/css">
#container {
width: 800px;
height:500px;
}
</style>
</head>
<body>
<button id="show">Show</button>
<button id="hide">Hide</button>
<div id="container"></div>
<script type="text/javascript">
// Repeatedly click on 'Hide' then 'Show' (8+ times sometimes). At some point the markers disappear and not come back - even if the code for showing/hiding markers is entirely commented out.
// The issue seems to be with the map.fitBounds() call when un-optimized markers are being used.
// Note - un-optimized markers are needed for targeting marker HTML elements as part of an acceptance test.
// Replicated on: 45.0.2 Firefox; 49.0.2623.112 m Chrome.
function changeBounds(boolToggle) {
//return; // TODO - if you add this line in the problem is fixed.
var bounds = new google.maps.LatLngBounds();
var latLng = boolToggle ? new google.maps.LatLng(70, 70) : new google.maps.LatLng(30, 30);
bounds.extend(marker1.getPosition());
bounds.extend(marker2.getPosition());
bounds.extend(latLng);
map.fitBounds(bounds);
}
var mapOptions = {
center : { lat : 50, lng : 50 },
zoom: 5,
};
var map = new google.maps.Map(document.getElementById("container"), mapOptions);
var marker1 = new google.maps.Marker({
position : {
lat : 51,
lng : 51,
},
title : "MARK1",
optimized : false
});
var marker2 = new google.maps.Marker({
position : {
lat : 52,
lng : 52,
},
title : "MARK2",
optimized : false
});
marker1.setMap(map);
marker2.setMap(map);
document.getElementById('show').onclick = function() {
//marker1.setVisible(true); // TODO - The original code was showing/hiding the markers but the issue is replicated without even doing this.
//marker2.setVisible(true);
changeBounds(true);
}
document.getElementById('hide').onclick = function() {
//marker1.setVisible(false); // TODO - The original code was showing/hiding the markers but the issue is replicated without even doing this.
//marker2.setVisible(false);
changeBounds(false);
}
</script>
</body>
</html>
編集:私はGoogleとのバグとしてこれを報告しました。 https://code.google.com/p/gmaps-api-issues/issues/detail?id=9912
私は縮小さGmaps APIで捕まってしまったが、私はこれを言うことができます。マーカーは、物理的に(自分のDOM要素を)消え、私はマーカのマップをリセットしても戻ってこない(最適化をtrueに変更してから、それを表示するマーカー上で.setMap(map)を実行するが、falseに設定して再びsetMapを実行すると消えてしまう!)、マーカーを再び表示させる唯一の方法は、マップを少しドラッグすることです。 –
フィドルをマップにレンダリングし、Chromeでその問題を確認しました – geocodezip