Ở chương này, chúng ta sẽ xem cách tìm kiếm các phần tử trên trang sử dụng WebDriver API.
Một trong những thứ ta đã học ở chương trước là WebDriver, theo kiếm trúc của nó thì có 2 components chính. Cái đầu tiên là "driver". Cái này thì có commands để tìm kiếm phần tử.
Ta sẽ bắt đầu tìm hiểu về các lệnh khác nhau. Ban đầu sẽ là các lệnh helper trước và sau đó là những lệnh phức tạp hơn để lấy các kiểu object khác nhau . Kết thúc chương sẽ học về những kỹ thuật hữu ích khi tương tác với việc tìm kiếm phần tử.

Đầu tiên là những điểm chính sẽ học:

  • Tìm kiếm phần tử trên trang bằng ID, tên, ClassName, XPath của chúng và danh sách liên kết
  • Mẹo cho việc tìm kiếm gọi tìm kiếm phần tử

Điểm mở đầu quan trọng

Bạn có thể sử dụng class với JUnit 4 như ví dụ dưới đây.

import org.junit.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.*;
import java.io.File;
import java.util.Dictionary;
public class TestExample1 {
Webdriver driver;
@Before
public void setUp(){
driver = new FirefoxDriver();
driver.get("http://book.theautomatedtester.co.uk/chapter1");
}
@After
public void tearDown(){
driver.quit();
}
@Test
public void testExamples(){
// We will put examples in here
}

Ta cũng nên ghi nhớ rằng việc tìm kiếm phần tử cũng có thể được thực hiện từ 1 phần tử.
Ví dụ, nếu bạn muốn tìm liên kết đầu tiên sau khi 1 button gọi buootn, ta sẽ làm như dưới đây:

WebElement element = ((FindsById)driver).findElementById("button");
WebElement childElement = element.findElement(By.tagName("a"));

Ta sẽ tìm hiểu về ý nghĩa của cái này sâu hơn khi đi xuyết suốt chương.

Tìm kiếm phần tử

Khi làm việc với WebDriver trên ứng dụng web, ta sẽ cần tìm kiếm phần tử trên trang. Đây là điểm mấu chốt của vấn đề. Tất cả các phương thức thực hiện thao tác với ứng dụng web như gõ, click đòi hỏi ta phải tìm kiếm phần tử trước tiên.

Tìm kiếm 1 phần tử trên trang bằng ID của nó

Điều đầu tiên ta sẽ tìm hiểu là tìm kiếm 1 phần tử bằng ID.
Việc tìm kiếm phần tử bằng ID là 1 trong những cách dễ nhất để tìm kiếm 1 phần tử. Ta sẽ bắt đầu với findElementByID().
Đây là 1 phương thử helper giúp thiết lập 1 đối số cho việc gọi findElement. Giờ ta sẽ cùng xem cách sử dụng nó như thế nào nhé. Ký hiệu của phương thức trông sẽ như sau:

findElementById(String using);

Biến using sẽ lấy ID của phần tử bạn muốn tìm kiếm. Nó sẽ trả về 1 đối tượng WebElement mà sau này bạn có thế làm việc cùng.

Thời điểm hành động – sử dụng findElementById()

Ta sẽ tìm kiếm 1 phần tử trên trang sử dụng phương thức findElementByid() trên mỗi class Browser Driver. findElement sẽ trả về 1 đối tượng WebElement mà ta có thể thể hiện hành động trên đó.
Hãy cùng làm theo những bước sau để thấy cách chúng làm việc nhé.

  1. Mở Java IDE, thường sử dụng Intellij hoặc Eclipse
  2. Ta sẽ sử dụng lệnh:
WebElement element = ((FindsById)driver).
findElementById("verifybutton");
  1. Chạy test từ IDE. Nó sẽ trông giống hình bên dưới:

Điều gì vừa xảy ra?

Ta vừa thấy cách tìm kiếm 1 phần tử bằng cách sử dụng phương thức hỗ trợ findElementById. Sau khi chạy test, ta sẽ thấy kết quả PASSED. Điều này có nghĩa nó đã tìm thấy phần tử. Nếu phần tử không được tìm thấy trong Selenium, WebDriver sẽ ném ra exception NoSuchElementFoundException.

Tìm kiếm phần tử trên trang bằng ID

Ngoài findElementById còn có findElementsByID.

findElement () trả về một đối tượng WebElement dựa trên một tiêu chí tìm kiếm chi tiết và sẽ ném một ngoại lệ nếu nó không tìm thấy bất kỳ phần tử phù hợp với các tiêu chí tìm kiếm.

findElements () trả về một danh sách các WebElements phù hợp với các tiêu chí tìm kiếm. Nếu không có phần tử được tìm thấy, nó sẽ trả về một danh sách rỗng.

Thời điểm hành động – sử dụng findElementsById()

Ta sẽ đi tìm kiếm 1 phần tử trên trang bằng cách sử dụng phương thức findElementsByid() trong mỗi lớp Browser Driver. findElement sẽ trả về 1 đối tượng WebElement mà ta có thể thực hiện hành động cùng.

  1. Mở Java IDE, thường sử dụng Intellij hoặc Eclipse
  2. Ta sẽ sử dụng lệnh:
List<WebElement> elements = ((FindsById)driver)
.findElementsById("verifybutton");
Assert.equals(1, elements.size());
  1. Chạy test từ IDE. Nó sẽ trông giống hình bên dưới:

Điều gì vừa xảy ra?

Ta vừa thấy cách tìm kiếm 1 phần tử bằng cách sử dụng phương thức hỗ trợ findElementsByid. Sau khi chạy test, ta sẽ thấy kết quả PASSED. Khác với phiên bản một của nó (findElementByid), nó sẽ không ném ra ngoại lệ NoSuchElementException nếu không có phần tử nào được tìm thấy. Nó sẽ trả về 1 danh sách có kích thước là 0.

Nguồn dịch:

Sách Selenium 2 Testing Tools- Beginner’s Guide [eBook] – David Burns