Skip to content

Commit 0fefd04

Browse files
committed
add more logging improve transformnNode
1 parent 364ace5 commit 0fefd04

3 files changed

Lines changed: 60 additions & 21 deletions

File tree

e2e/logic/POM/codeGraph.ts

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -595,31 +595,54 @@ export default class CodeGraph extends BasePage {
595595
}
596596

597597
async transformNodeCoordinates(graphData: any): Promise<any[]> {
598-
await this.page.waitForTimeout(3000);
599-
const { canvasLeft, canvasTop, canvasWidth, canvasHeight, transform } = await this.canvasElement.evaluate((canvas: HTMLCanvasElement) => {
600-
const rect = canvas.getBoundingClientRect();
601-
const ctx = canvas.getContext('2d');
602-
const transform = ctx?.getTransform()!;
603-
return {
604-
canvasLeft: rect.left,
605-
canvasTop: rect.top,
606-
canvasWidth: rect.width,
607-
canvasHeight: rect.height,
608-
transform,
609-
};
610-
});
611-
612-
const screenCoordinates = graphData.elements.nodes.map((node: any) => {
613-
const adjustedX = node.x * transform.a + transform.e;
598+
let maxRetries = 5;
599+
let transform = null;
600+
let canvasRect = null;
601+
602+
// Ensure the graph is fully loaded before proceeding
603+
await this.page.waitForFunction(() => window.graph && window.graph.elements?.nodes?.length > 0);
604+
await this.page.waitForTimeout(3000); // Wait for canvas animations to settle
605+
606+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
607+
await this.page.waitForTimeout(1000); // Allow further stabilization before fetching data
608+
609+
// Fetch canvas properties
610+
const result = await this.canvasElement.evaluate((canvas: HTMLCanvasElement) => {
611+
const rect = canvas.getBoundingClientRect();
612+
const ctx = canvas.getContext('2d');
613+
return {
614+
canvasLeft: rect.left,
615+
canvasTop: rect.top,
616+
canvasWidth: rect.width,
617+
canvasHeight: rect.height,
618+
transform: ctx?.getTransform() || null, // Ensure transform is not null
619+
};
620+
});
621+
622+
if (!result.transform) {
623+
console.warn(`Attempt ${attempt}: Transform not available yet, retrying...`);
624+
continue; // Retry if transform is not available
625+
}
626+
627+
// If we successfully get a transform, store and break out of retry loop
628+
transform = result.transform;
629+
canvasRect = result;
630+
break;
631+
}
632+
633+
if (!transform) throw new Error("Canvas transform data not available after multiple attempts!");
634+
635+
// Convert graph coordinates to screen coordinates
636+
return graphData.elements.nodes.map((node: any) => {
637+
const adjustedX = node.x * transform.a + transform.e;
614638
const adjustedY = node.y * transform.d + transform.f;
615-
const screenX = canvasLeft + adjustedX - 35;
616-
const screenY = canvasTop + adjustedY - 190;
639+
const screenX = canvasRect!.canvasLeft + adjustedX - 35;
640+
const screenY = canvasRect!.canvasTop + adjustedY - 190;
617641

618-
return {...node, screenX, screenY,};
642+
return { ...node, screenX, screenY };
619643
});
620-
621-
return screenCoordinates;
622644
}
645+
623646

624647
async getCanvasScaling(): Promise<{ scaleX: number; scaleY: number }> {
625648
const { scaleX, scaleY } = await this.canvasElement.evaluate((canvas: HTMLCanvasElement) => {

e2e/tests/canvas.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,11 @@ test.describe("Canvas tests", () => {
5858
const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl);
5959
await codeGraph.selectGraph(GRAPH_ID);
6060
const initialGraph = await codeGraph.getGraphDetails();
61+
const nod = findNodeByName(initialGraph.elements.nodes, node.nodeName);
62+
console.log("before x:", nod.x, " before y: ",nod.y);
6163
const convertCoordinates = await codeGraph.transformNodeCoordinates(initialGraph);
6264
const targetNode = findNodeByName(convertCoordinates, node.nodeName);
65+
console.log("after test: ", targetNode.screenX, " ", targetNode.screenY);
6366
await codeGraph.nodeClick(targetNode.screenX, targetNode.screenY);
6467
await codeGraph.clickOnRemoveNodeViaElementMenu();
6568
const updatedGraph = await codeGraph.getGraphDetails();
@@ -73,8 +76,11 @@ test.describe("Canvas tests", () => {
7376
const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl);
7477
await codeGraph.selectGraph(GRAPH_ID);
7578
const initialGraph = await codeGraph.getGraphDetails();
79+
const nod = findNodeByName(initialGraph.elements.nodes, node.nodeName);
80+
console.log("before x:", nod.x, " before y: ",nod.y);
7681
const convertCoordinates = await codeGraph.transformNodeCoordinates(initialGraph);
7782
const targetNode = findNodeByName(convertCoordinates, node.nodeName);
83+
console.log("after test: ", targetNode.screenX, " ", targetNode.screenY);
7884
await codeGraph.nodeClick(targetNode.screenX, targetNode.screenY);
7985
await codeGraph.clickOnRemoveNodeViaElementMenu();
8086
await codeGraph.clickOnUnhideNodesBtn();
@@ -170,8 +176,11 @@ test.describe("Canvas tests", () => {
170176
const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl);
171177
await codeGraph.selectGraph(GRAPH_ID);
172178
const graphData = await codeGraph.getGraphDetails();
179+
const nod = findNodeByName(graphData.elements.nodes, node.nodeName);
180+
console.log("before x:", nod.x, " before y: ",nod.y);
173181
const convertCoordinates = await codeGraph.transformNodeCoordinates(graphData);
174182
const targetNode = findNodeByName(convertCoordinates, node.nodeName);
183+
console.log("after x:", targetNode.x, " after y: ",targetNode.y);
175184
await codeGraph.nodeClick(targetNode.screenX, targetNode.screenY);
176185
const result = await codeGraph.clickOnCopyToClipboard();
177186
const api = new ApiCalls();

e2e/tests/nodeDetailsPanel.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@ test.describe("Node details panel tests", () => {
2323
const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl);
2424
await codeGraph.selectGraph(GRAPH_ID);
2525
const graphData = await codeGraph.getGraphDetails();
26+
const nod = findNodeByName(graphData.elements.nodes, node.nodeName);
27+
console.log("before x:", nod.x, " before y: ",nod.y);
2628
const convertCoordinates = await codeGraph.transformNodeCoordinates(graphData);
2729
const targetNode = findNodeByName(convertCoordinates, node.nodeName);
30+
console.log("after test: ", targetNode.screenX, " ", targetNode.screenY);
2831
expect(targetNode).toBeDefined();
2932
await codeGraph.nodeClick(targetNode.screenX, targetNode.screenY);
3033
await codeGraph.clickOnViewNode();
@@ -89,8 +92,12 @@ test.describe("Node details panel tests", () => {
8992
const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl);
9093
await codeGraph.selectGraph(GRAPH_ID);
9194
const graphData = await codeGraph.getGraphDetails();
95+
const nod = findNodeByName(graphData.elements.nodes, node.nodeName);
96+
console.log("before x:", nod.x, " before y: ",nod.y);
97+
9298
const convertCoordinates = await codeGraph.transformNodeCoordinates(graphData);
9399
const node1 = findNodeByName(convertCoordinates, node.nodeName);
100+
console.log("after test: ", node1.screenX, " ", node1.screenY);
94101
const api = new ApiCalls();
95102
const response = await api.getProject(PROJECT_NAME);
96103
const data: any = response.result.entities.nodes;

0 commit comments

Comments
 (0)