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

22:56 11-07-2024 1.049 lượt xem 0 bình luận

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);

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập

Câu hỏi mới nhất