blob: 16c8e2bcee6a68cd1f0991db2866fb08d6996df1 [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startHTML(`
Several<br>
Lines<br>
Of<br>
Text<br>
<div style='position:absolute;top:100;left:0;width:100;height:100;background:red'></div>
<div style='position:absolute;top:200;left:100;width:100;height:100;background:green'></div>
<div style='position:absolute;top:150;left:50;width:100;height:100;background:blue;transform:rotate(45deg);'></div>
`, 'Tests DOM.getBoxModel method.');
await session.evaluate(() => {
var iframe = document.createElement('iframe');
iframe.style.position = 'absolute';
iframe.style.top = '200px';
iframe.style.left = '200px';
iframe.style.width = '500px';
iframe.style.height = '500px';
document.body.appendChild(iframe);
iframe.contentWindow.document.body.innerHTML = `
<div style="width:100px;height:100px;background:orange"></div>
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" style="position:absolute;top:200px;left:200px;">
<rect id="theRect" x="30" y="50" width="100" height="100"></rect>
</svg>
`;
});
var NodeTracker = await testRunner.loadScript('../resources/node-tracker.js');
var nodeTracker = new NodeTracker(dp);
const bn1 = (await dp.DOM.getNodeForLocation({x: 100, y: 200})).result.backendNodeId;
const bn2 = (await dp.DOM.getNodeForLocation({x: 250, y: 250})).result.backendNodeId;
const bn3 = (await dp.DOM.getNodeForLocation({x: 500, y: 500})).result.backendNodeId;
await dp.DOM.enable();
await dp.DOM.getDocument();
await nodeTracker.nodeForBackendId(bn1);
await nodeTracker.nodeForBackendId(bn2);
await nodeTracker.nodeForBackendId(bn3);
for (var nodeId of nodeTracker.nodeIds()) {
var node = nodeTracker.nodeForId(nodeId);
if (node.nodeName !== 'DIV' && node.nodeName !== 'rect')
continue;
await dp.Emulation.clearDeviceMetricsOverride();
var message = await dp.DOM.getBoxModel({nodeId});
await dp.Emulation.setDeviceMetricsOverride({
width: 800,
height: 600,
mobile: true,
deviceScaleFactor: 2
});
var emulatedMessage = await dp.DOM.getBoxModel({nodeId});
if (message.error)
testRunner.log(node.nodeName + ': ' + message.error.message);
else if (emulatedMessage.error)
testRunner.log(node.nodeName + ': ' + message.error.message);
else if (!quadsMatch(message.result.model.content, emulatedMessage.result.model.content))
testRunner.log(node.nodeName + ': content does not match emulated content.')
else
testRunner.log(message.result.model.content, node.nodeName + ' ' + node.attributes + ' ');
}
testRunner.completeTest();
function quadsMatch(a, b) {
for (var i = 0; i < a.length; i++) {
if (Math.round(a[i] * 1000) !== Math.round(b[i] * 1000))
return false;
}
return true;
}
})