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();
}
}
}
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
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 ạ
Code trong bài sẽ sắp xếp từ trên xuống, từ trái qua phải, em có thể đảo lại để sắp xếp trái qua phải và trên xuống. Thay đổi lại các biến là được. Màng hình nhỏ thì chia 2 hoặc 3 cột tùy theo tham số luồng. Đặt thêm điều kiện if ((i == 1) & (j == 0)) { x = 320 * 2; } if ((i == 1) & (j == 1)) { x = 320 * 3; } để sắp xếp theo ý mong muốn. Muốn đưa dữ liệu vòa luồng để chạy độc lập thì… Đọc thêm »
Anh lam` 1 bai rieng duoc khong anh
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 ạ.
hay quá đang cần cái này, thank ad nhé
em tai file cua anh nhung chay k dc
Bạn cập nhật lại chromedriver và selenium version mới nhất ở mục Nuget nha
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
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