Nội dung bài học

Sử dụng các hàm cơ bản của Interface WebDriver nằm trong pagekage org.openqa.selenium.WebDriver

[Selenium Java]  Lesson 7: Sử dụng các hàm cơ bản của WebDriver | Anh Tester

Đị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

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.firefox.EdgeDriver;
WebDriver driver = new EdgeDriver();
// Khởi tạo: selenium-ie-driver
import org.openqa.selenium.ie.InternetExplorerDriver;
WebDriver driver = new InternetExplorerDriver();
// Khởi tạo: selenium-safari-driver
import org.openqa.selenium.safari.SafariDriver;
WebDriver driver = new SafariDriver();
 

Basic Browser Operations

Các thao tác trình duyệt cơ bản

// 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

Các thao tác trình duyệt nâng cao
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.
Ví dụ: Click vào 1 đường link ở page hiện tại, nó open 1 browser mới. Mỗi browser này sẽ có 1 mã số để phân biệt chúng với nhau.


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);​


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 TargetLocator

//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

Các thao tác tùy chỉnh thời gian chờ

// Đặ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(10, TimeUnit.SECONDS);

//Thiết lập thời gian chờ Load page xong mới thao tác (tối đa 30s)
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);


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

Cộng đồng Automation Testing Việt Nam:


🌱 Zalo
Automation Testing:   https://zalo.me/g/lsxswc560
🌱 Facebook Group: Cộng đồng Automation Testing Việt Nam (Website, Desktop, Mobile)
🌱 Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium

About the author

  • Anh Tester

    Đường dẫu khó chân vẫn cần bước đi
    Đời dẫu khổ tâm vẫn cần nghĩ thấu



Cộng đồng Automation Testing Việt Nam:


🌱 Zalo
Automation Testing:   https://zalo.me/g/lsxswc560
🌱 Facebook Group: Cộng đồng Automation Testing Việt Nam (Website, Desktop, Mobile)
🌱 Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium

Chia sẻ kiến thức lên trang

Bạn có thể đăng bài để chia sẻ kiến thức, bài viết của chính bạn lên trang Anh Tester Blog

Danh sách bài học