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

5 1 vote
Đánh giá bài viết
Subscribe
Notify of
guest
0 Bình luận
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x