Tổng hợp một số cách mở 1 link trong tab mới với Selenium Webdriver
Bài viết được sự cho phép của tác giả Tô Thị Vân Anh
Trong bài viết này chúng ta sẽ cùng nhau xem lại một vài cách để thực hiện mở 1 link trong tab mới, trong tiếng anh là “Open a link in new tab”, quá quen thuộc khi mà chúng ta nhấn chuột phải ở trang web đang làm việc để mở đường dẫn trong một tab khác. Và vì thế nên là mình sẽ đi vào giải quyết vấn đề luôn mà không nói lan man nữa.
1. Sử dụng javascript với cú pháp như sau:
((JavascriptExecutor) driver).executeScript ("window.open('http://accounts.google.com/','_blank');");
Muốn mở đến đường dẫn nào thì bạn chỉ cần thay đường link trên bằng 1 đường dẫn tương ứng khác là được. Nhưng mà cái này sẽ gặp vấn đề khi chạy với trình duyệt IE – IE nó sẽ hiện một dòng hỏi bạn là có muốn mở tab khác hay không, nên là sẽ không tiện nếu như mà dùng cách này với IE. :3
2. Sử dụng cách dưới này
Cú pháp như sau:
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Hoặc tách bước ở dòng thứ 2 ra như này thì sẽ sáng sủa hơn:
WebElement urlLink = driver.findElement(By.linkText("Overview")); String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); urlLink.sendKeys(selectLinkOpeninNewTab);
Với cách này thì chạy ok với trình duyệt Firefox, Chrome nhưng không focus vào tab mới mở ra – còn trên trình duyệt IE thì bật ra cửa sổ mới – cũng “don’t know why!”
Để nó focus sang cửa sổ mới thì các bạn thêm đoạn code phía dưới này vào, và chúng ta có được đoạn code đầy đủ như này nhé:
//Linktext của đường dẫn mới WebElement urlLink = driver.findElement(By.linkText("Overview")); //Mở đường dẫn mới ở một tab mới String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN); urlLink.sendKeys(selectLinkOpeninNewTab); //Focus sang tab mới ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); driver.switchTo().window(tabs.get(1));
3. Sử dụng robot class:
Như chúng ta đều đã nghe nói đến Robot class trong Selenium rồi, đơn giản dễ hiểu thì robot được sử dụng để giả lập các sự kiện liên quan đến thao tác trên bàn phím, hay các thao tác click của chuột, nên là với trường hợp này ở đây, ta có thể tưởng tượng như đang làm bằng tay và giả lập cho code của chúng ta cũng sẽ làm như vậy nhờ Robot. Đầu tiên nhấn Control + t để mở tab mới, sau khi tab mới được mở ra thì ta sẽ chuyển focus chuột vào tab mới này và mở link mới ở tab đó thôi.
Các bạn có thể tham khảo đoạn code phía dưới để hình dung rõ hơn nhé! Ban đầu dùng đoạn code dưới này để chạy thì nó chỉ chạy được đến bước là mở tab mới có focus vào tab mới này, nhưng không thể nào mở được cái link mới, không thể hiểu tại sao dù đã google tìm rất nhiều thì code cũng chỉ có vậy – vấn đề đối với cả FF và Chrome. :3
Chạy đi chạy lại nhiều lần, bỗng dưng vẫn đoạn code đó thì Chrome lại được, và mình nhanh chóng thử lại với FF thì lại không được, vẫn chết đoạn get(index), quay lại với Chrome thì lại không chạy được nữa, lúc này mới nhớ ra nhét thử sleep() vào, thì lại ngon lành cho cả hai! – Không thể tin được =))
//Ra lệnh cho rô-bốt mở tab mới Robot r = new Robot(); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_T); r.keyRelease(KeyEvent.VK_CONTROL); r.keyRelease(KeyEvent.VK_T); //Đoạn này để nhảy sang tab mới ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); driver.switchTo().window(tabs.get(1)); //Sleep thần thánh Thread.sleep(2000); //Mở link mới trên tab mới driver.get("https://jmeter.apache.org/usermanual/index.html");
4. Sử dụng class Action
Mình đã test trên IE11, FF58,59 và Chrome 66 , với FF, Chrome thì không chạy được, mà đối với IE thì nó lại mở ra một cửa sổ mới, không hiểu tại sao. :3
Dưới đây là đoạn code các bạn có thể tham khảo và góp ý cho mình:
WebElement link = driver.findElement(By.linkText("Installing Apache JMeter in Windows XP")); Actions act = new Actions(driver); act.contextClick(link).sendKeys(Keys.ARROW_DOWN). sendKeys(Keys.ARROW_DOWN). sendKeys(Keys.ENTER).build().perform();
5. Bonus thêm 1 cách khác – cách này thì chạy ngon…
Đầu tiên sử dụng Javaexecutor để mở 1 tab trống mới,
((JavascriptExecutor)driver).
executeScript(“window.open(‘about:blank’, ‘-blank’)”);
Sau đó, thực hiện nhảy sang tab mới với cú pháp:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); driver.switchTo().window(tabs.get(1));
Và cuối cùng là dán cái link mới vào cái tab này là được:
driver.get("https://jmeter.apache.org/usermanual/index.html");
Và trên đây là những cách mà mình đã đào bới được trên google, phát hiện ra là những cái này khá là phụ thuộc vào trình duyệt mà chúng ta sử dụng vì thế các bạn có thể linh động với trình duyệt để lựa chọn các cách cho phù hợp nhé!
Bài viết tham khảo và tổng hợp từ tè le các nguồn thu thập được trên internet điển hình là từ stackoverflow và nhiều trang khác nữa
Bài viết gốc được đăng tải tại vananhtooo.wordpress.com
Có thể bạn quan tâm:
- Làm việc với table trong Selenium Webdriver
- Xử lý SSL Certificate trong Selenium WebDriver
- Mã hóa mật khẩu trong Selenium Webdriver
Xem thêm Việc làm Developer hấp dẫn trên TopDev
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- i iOS 18 có gì mới? Có nên cập nhật iOS 18 cho iPhone của bạn?
- G Gamma AI là gì? Cách tạo slide chuyên nghiệp chỉ trong vài phút
- P Power BI là gì? Vì sao doanh nghiệp nên sử dụng PBI?
- K KICC HCMC x TOPDEV – Bước đệm nâng tầm sự nghiệp cho nhân tài IT Việt Nam
- T Trello là gì? Cách sử dụng Trello để quản lý công việc
- T TOP 10 SỰ KIỆN CÔNG NGHỆ THƯỜNG NIÊN KHÔNG NÊN BỎ LỠ
- T Tìm hiểu Laptop AI – So sánh Laptop AI với Laptop thường
- M MySQL vs MS SQL Server: Phân biệt hai RDBMS phổ biến nhất
- S SearchGPT là gì? Công cụ tìm kiếm mới có thể đánh bại Google?