Cách sắp xếp vị trí cửa sổ trình duyệt Selenium khi chạy đa luồng C#

selenium tutorial

Nhận thấy câu hỏi này được nhiều bạn quan tâm và hỏi đi hỏi lại rất nhiều lần nên mình tìm hiểu và viết bài này để giải đáp vấn đề sắp xếp vị trí của sổ trình duyệt khi mở Selenium. Demo bằng code của C#

Đầu tiên thử tạo một Project mẫu với mới một textbox hay ô Number để thể hiện số luồng. Kế tiếp là một Button để thực thi chương trình.

Giả sử kiểm thử số luồng thực hiện là 6 luồng chia làm 3 cột.

Xử lý code của Button Start để khi click vào thì có thể tắt được nhiều luồng. Nếu không xử lý thì máy sẽ chạy chậm do các chromedriver.exe chiếm dụng RAM

private void BTN_Start_Click(object sender, EventArgs e)
{
     if (BTN_Start.Text == "START")
      {
          BTN_Start.Text = "STOP";
          Action();
      }
       else
       {
          BTN_Start.Text = "START";
           try
           {
              Process[] processesChrome = Process.GetProcessesByName("chromedriver");
              foreach (Process processChrome in processesChrome)
              {
                  processChrome.Kill();
              }
           }
           catch { }
        }
  }

Tiếp theo viết code cho hàm Action() để xử lý đa luồng.

private void Action()
{
   int luong = (int)Num_luong.Value;
   for (int i = 0; i < (luong/2); i++)
   {
          int x = 320*i;
          for (int j = 0; j < 2; j++)
          {
               int y = 480*j;
               Thread thread = new Thread((ThreadStart)delegate
               {
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.BinaryLocation = "C:\\Program Files\\Google\\Chrome\\Application\\Chrome.exe";
chromeOptions.AddArgument("--app=https://tranquocdai.com");
chromeOptions.AddArgument("--window-size=320,480");
chromeOptions.AddExcludedArgument("enable-automation");
chromeOptions.AddAdditionalCapability("useAutomationExtension", false);
ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
ChromeDriver driver = new ChromeDriver(chromeDriverService, chromeOptions);
                driver.Manage().Window.Position = new Point(x,y);
                Thread.Sleep(1000);
                });
                thread.IsBackground = true;
                thread.Start();
           }
      }
}
Chạy đa luồng selenium

Ngoài cách set tọa độ kiểu này còn một cách nữa là sử dụng Handle của Webdriver cho vào một mảng List rồi tùy chỉnh lại vị trí tọa độ theo kích thước màng hình sau. Mà nói thật là công thức để tính mấy cái tọa độ này nó hơi rối, nhìn vào chóng mặt hoa mắt lắm. Kiểu như phải lấy kích thước màng hình rồi chia cho độ dài của cửa sổ trình duyệt ra được số cột cho phép. Lấy độ cao màng hình chia cho độ cao cửa sổ trình duyệt ra được số dòng cho phép. Sau đó tính toán tọa độ cho hiển thị.

Tóm lại: Dùng cách trên là thấy ổn rồi, không cần nhức đầu làm cách khác.

Tải Project mẫu: https://github.com/tranquocdai/ArrangeChromeDriverSelenium

Subscribe
Notify of
guest
9 Bình luận
Cũ nhất
Mới nhất Most Voted
Inline Feedbacks
View all comments
Vin

e thấy với màn hình của anh thôi chứ màn nhỏ hơn bị ngắt khúc :3
với cho e hỏi là làm sao để đưa dữ liệu vào mỗi luồng để nó chạy độc lập ạ

Vin

Anh lam` 1 bai rieng duoc khong anh

Sơn

Anh cho em hỏi làm cách nào để nhúng Wed brower khác vào WedBrower mặc định trong Winform C# ạ chẳng hạn như thay thành chorme hay brave ạ.

Hoàng

hay quá đang cần cái này, thank ad nhé

thanh

em tai file cua anh nhung chay k dc

Nguyễn Vĩnh

anh ơi giúp em cái đoạn này với bên chrome đoạn thay đổi kích thước trình duyệt bằng này thì bình thường chromeOptions.AddArgument(“–window-size=320,480”);

nhưng em dùng fifoxoptions.AddArgument(“–window-size=320,480”);

thì nó lại ko theo ý được bình thường chrome em chọn đoạn size = 10,10 thì nhỏ tý còn bên kia vẫn mặc định

Tran

cái này mình thử, hình như ko chạy cùng lúc các hành động ở các cửa sổ được. mà phải chờ cửa sổ này xong rồi mới qua cửa sổ khác xử lý.. nếu 1 cửa sổ bị treo thì tất cả đều treo theo

9
0
Would love your thoughts, please comment.x