Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
thao tác với canvas bắng seleniun
tình hình là em có sử dụng selenium để thao tác trên 1 game web đơn giản.
e cần click tại 1 vị trí trong thẻ canvas
trong trình devtool của chrome e đã kiểm ra các sự kiện click và thấy canvas đã nhận click nhưng trên giao diện thì không thấy thay đổi gì.
các pro cho e hỏi đối với các đối tượng trong canvas thì làm sao để phải làm thế nào mới được ạ
dưới đây là code e đang test ạ
IWebElement canvas = drivers[0].FindElement(By.Id("unity-canvas"));
int canvasWidth = canvas.Size.Width;
int canvasHeight = canvas.Size.Height;
Console.WriteLine($"Canvas width: {canvasWidth}, height: {canvasHeight}");
string script = @"var canvas = document.getElementById('unity-canvas');
var rect = canvas.getBoundingClientRect();
var clientX = rect.left + 964;
var clientY = rect.top + 849;
var evt = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window,
clientX: clientX,
clientY: clientY
});
canvas.dispatchEvent(evt);";
// Thực thi mã JavaScript bằng JavascriptExecutor
IJavaScriptExecutor js = (IJavaScriptExecutor)drivers[0];
js.ExecuteScript(script);
Console.WriteLine("da click");
int x = 964;
int y = 849;
string moveMouseScript = $"var canvas = document.getElementById('unity-canvas');" +
$"var rect = canvas.getBoundingClientRect();" +
$"var clientX = rect.left + {x};" +
$"var clientY = rect.top + {y};" +
$"window.scrollTo(0, rect.top);" +
$"var evt = new MouseEvent('mousemove', {{ clientX: clientX, clientY: clientY }});" +
$"canvas.dispatchEvent(evt);";
string focusScript = $"var canvas = document.getElementById('unity-canvas');" +
$"canvas.focus();";
((IJavaScriptExecutor)drivers[0]).ExecuteScript(focusScript);
// Thực thi script bằng JavaScriptExecutor
((IJavaScriptExecutor)drivers[0]).ExecuteScript(moveMouseScript);
// Thực hiện sự kiện mousedown với chuột trái
string mousedownScript = $"var canvas = document.getElementById('unity-canvas');" +
$"var rect = canvas.getBoundingClientRect();" +
$"var clientX = rect.left + {x};" +
$"var clientY = rect.top + {y};" +
$"var evt = new MouseEvent('mousedown', {{" +
$"clientX: clientX, clientY: clientY," +
$"button: 0," + // 0 là nút chuột trái
$"bubbles: true, cancelable: true, view: window" +
$"}});" +
$"canvas.dispatchEvent(evt);";
((IJavaScriptExecutor)drivers[0]).ExecuteScript(mousedownScript);
Thread.Sleep(500);
string mouseupScript = $"var canvas = document.getElementById('unity-canvas');" +
$"var rect = canvas.getBoundingClientRect();" +
$"var clientX = rect.left + {x};" +
$"var clientY = rect.top + {y};" +
$"var evt = new MouseEvent('mouseup', {{" +
$"clientX: clientX, clientY: clientY," +
$"button: 0," + // 0 là nút chuột trái
$"bubbles: true, cancelable: true, view: window" +
$"}});" +
$"canvas.dispatchEvent(evt);";
((IJavaScriptExecutor)drivers[0]).ExecuteScript(mouseupScript);