NỘI DUNG BÀI HỌC
Định vị các phần tử trong Selenium WebDriver được thực hiện với sự trợ giúp của các phương thức findElement() và findElements() được cung cấp bởi lớp WebDriver và WebElement.
- findElement(): trả về một đối tượng WebElement
- findElements(): trả về một danh sách các đối tượng thuộc WebElement
Bảng sau liệt kê tất cả cú pháp Java để định vị một phần tử trong Selenium WebDriver.
Phương thức | Cú pháp | Mô tả |
---|---|---|
Theo ID | driver.findElement(By.id (<element ID>)) | Định vị một phần tử bằng thuộc tính ID |
Theo name | driver.findElement(By.name (<element name>)) | Định vị một phần tử bằng cách sử dụng thuộc tính Name |
Theo class name | driver.findElement(By.className (<element class>)) | Định vị một phần tử bằng thuộc tính Class |
Theo tag name | driver.findElement(By.tagName (<htmltagname>)) | Định vị một phần tử bằng cách sử dụng thẻ HTML |
Bằng văn bản liên kết | driver.findElement(By.linkText (<linktext>)) | Tìm liên kết bằng văn bản liên kết |
Bằng văn bản liên kết một phần | driver.findElement(By.partialLinkText (<linktext>)) | Định vị liên kết bằng văn bản một phần của liên kết |
Theo CSS | driver.findElement(By.cssSelector (<css selector>)) | Định vị một phần tử bằng cách sử dụng bộ chọn CSS |
Theo XPath | driver.findElement(By.xpath (<xpath>)) | Định vị một phần tử bằng cách sử dụng truy vấn XPath |
Hàm:
driver.findElements()
- Tìm kiếm tất cả các element mà match với điều kiện (tìm theo kiểu locator gì đó)
- Kiểu dữ liệu: java.util.List<WebElement>: nó sẽ return lại 1 list các giá trị loại WebElement.
- Có thể viết code như sau:
List<WebElement> options = driver.findElements(By.xpath("//option"));
Và vì đây là list nên để tương tác với từng element ở trong list thì chúng ta thường sẽ sử dụng vòng lặp.
Ví dụ:
- Chạy từ 0 đến bé hơn số lượng Element tìm được (vậy là tổng số lượng element chứ hả)
- In ra các giá trị Text của từng Element
for(int i=0; i<options.size(); i++){
System.out.println(options.get(i).getText());
}
Initialize Browser
Các cách khởi tạo driver với các loại trình duyệt khác nhau và Import thư viện tương ứng
// Khởi tạo: selenium-chrome-driver
import org.openqa.selenium.chrome.ChromeDriver;
WebDriver driver = new ChromeDriver();
// Khởi tạo: selenium-firefox-driver
import org.openqa.selenium.firefox.FirefoxDriver;
WebDriver driver = new FirefoxDriver();
// Khởi tạo: selenium-edge-driver
import org.openqa.selenium.edge.EdgeDriver;
WebDriver driver = new EdgeDriver();
// Khởi tạo: selenium-safari-driver
import org.openqa.selenium.safari.SafariDriver;
WebDriver driver = new SafariDriver();
Basic Browser Operations
// Navigate to a page
driver.navigate().to("http://anhtester.com");
// Điều hướng về lịch sử trang trước đó
driver.navigate().back();
// Làm mới trang hiện tại
driver.navigate().refresh();
// Điều hướng đến trang tiếp sau
driver.navigate().forward();
// Get the title of the page
String title = driver.getTitle();
// Get the current URL
String url = driver.getCurrentUrl();
// Get the current page HTML source
String html = driver.getPageSource();
Advanced Browser Operations
driver.get("https://anhtester.com");
driver.switchTo().newWindow(WindowType.TAB);
driver.get("https://google.com");
+ Mở cửa sổ mới trong trình duyệt:
driver.get("https://anhtester.com");
driver.switchTo().newWindow(WindowType.WINDOW);
driver.get("https://google.com");
+ Xử lý các Tab hoặc Window Popup trên:
String handle = driver.getWindowHandle();
- Lấy cái “mã số” của cái browser đang run và nó sẽ return lại 1 giá trị kiểu String.
- Cái này thường được dùng khi xử lý những phần có nhiều browser.
Set<String> allWindows = driver.getWindowHandles();
- Lấy toàn bộ các “mã số” của các browser đang run mà có sử dụng instance driver. Ví dụ nếu 1 cái browser mở lên do mình tự mở, không phải Selenium mở thì sẽ ko lấy đc “mã số”.
- Type java.util.Set<java.lang.String>: nó sẽ return lại 1 Set các giá trị kiểu String, Set có ý nghĩa là sẽ không có dữ liệu bị lặp.
Set<String> handle= driver.getWindowHandles();
for (String handle : driver.getWindowHandles()){
driver.switchTo().window(handle);
}
Tương tự phần findElements(), để tương tác được với Set thì ta dùng vòng lặp.
Ví dụ:
Set<String> AllWindowHandles = driver.getWindowHandles();
String window1 = (String) AllWindowHandles.toArray()[0];
System.out.println("Window 1 handle code = "+AllWindowHandles.toArray()[0]);
String window2 = (String) AllWindowHandles.toArray()[1];
System.out.print("Window 2 handle code = "+AllWindowHandles.toArray()[1]);
Code ngắn gọn lại:// Switch between browser windows or tabs
Set<String> windowHandles = driver.getWindowHandles();
String firstTab = (String)windowHandles.toArray()[0]; //Tab đầu
String lastTab = (String)windowHandles.toArray()[1]; //Tab thứ hai
driver.switchTo().window(lastTab);
Phần này thì chúng ta có bài chuyên riêng nên các bạn cũng đừng quan tâm sâu về code.
Các tùy chọn của Interface Options
// Phóng hết cỡ trình duyệt theo màn hình máy tính
driver.manage().window().maximize();
// Add a new cookie
Cookie newCookie = new Cookie("customName", "customValue");
driver.manage().addCookie(newCookie);
// Get all cookies
Set<Cookie> cookies = driver.manage().getCookies();
// Delete a cookie by name
driver.manage().deleteCookieNamed("CookieName");
// Delete all cookies
driver.manage().deleteAllCookies();
Các tùy chọn của Interface Target Locator
//Ví dụ: Chuyển driver sang 1 phần tử ngoài page như: window khác, alert, iframe.
//Handle Alert
driver.switchTo().alert();
// Switch to Frame
driver.switchTo().frame(1);//Đến khung hiển thị đầu
driver.switchTo().frame("frameName");//Đến khung hiển thị theo tên
WebElement element = driver.findElement(By.id("id"));
driver.switchTo().frame(element); //Chuyển đến khung hiển thị chứa element có ID chỉ định
// Chuyển sang khung hiển thị trên trình duyệt hiện tại
driver.switchTo().defaultContent();
Wait Configurations (chờ đợi)
// Đặt thời gian chời ngầm định cho tất cả các element (đơn vị Giây)
// Ví dụ thiết lập 10 giây cho tất cả
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
//Thiết lập thời gian chờ Load page xong mới thao tác (tối đa 30s)
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30));
Phần Wait này chúng ta có bài chuyên riêng luôn nhé. Còn Explicit Wait and Fluent Wait. Chúng ta sau này dùng Explicit Wait.
Trên đây là các lệnh cơ bản của WebDriver hỗ trợ trong Selenium Java.
Tìm hiểu thêm: Các lệnh truy vấn trong Selenium WebDriver Java