Cách xử lý bảng Web trong Selenium

⚡ Tóm tắt thông minh

Selenium Việc xử lý bảng trên web cho phép các kỹ sư QA đọc dữ liệu dạng bảng từ các hàng và cột HTML bằng cách sử dụng XPath, CSS và các công cụ khác. Selenium 4 bộ định vị tương đối. Bài viết này sẽ hướng dẫn về bảng tĩnh, bảng lồng nhau, vị ngữ thuộc tính và các kỹ thuật trí tuệ nhân tạo cho lưới động.

  • 🧱 Cấu trúc XPath: Mỗi bộ định vị bảng đều bắt đầu bằng //table và truy cập vào các phần tử tbody, tr và td bằng cách sử dụng các điều kiện lọc.
  • 🔁 Hàng động: Hàm findElements trả về một danh sách các phần tử web (WebElements) để các vòng lặp có thể đếm hàng và đọc các ô trong quá trình thực thi.
  • 🪄 Selenium 4: Các bộ định vị tương đối ở phía trên, phía dưới và gần giúp đơn giản hóa việc nhắm mục tiêu vào các tế bào xung quanh một phần tử neo đã biết.
  • 🧠 Công cụ định vị AI: Các công cụ tự phục hồi phát hiện sự dịch chuyển cột và khôi phục danh tính hàng mà không cần chỉnh sửa XPath thủ công.
  • 🛠️ Kiểm tra lối tắt: Công cụ dành cho nhà phát triển trình duyệt sao chép toàn bộ XPath mà bạn có thể cắt bớt xuống bảng đầu tiên để đảm bảo độ tin cậy.

Selenium Ví dụ về XPath trong bảng web

Bảng Web là gì Selenium?

A Bảng Web in Selenium Đây là một WebElement được sử dụng để biểu diễn dữ liệu hoặc thông tin dưới dạng bảng. Dữ liệu hiển thị có thể là tĩnh hoặc động. Các ô và hàng trong bảng web được truy cập thông qua các phương thức của WebElement kết hợp với các bộ định vị. Một ví dụ điển hình là lưới thông số kỹ thuật sản phẩm hiển thị trên trang sản phẩm thương mại điện tử.

Đọc bảng HTML trên web

Có rất nhiều trường hợp người kiểm thử cần truy cập các phần tử, thường là các giá trị văn bản, nằm bên trong các bảng HTML. Tuy nhiên, các nhà thiết kế web hiếm khi cung cấp thuộc tính id hoặc name cho từng ô riêng lẻ. Do đó, các phương thức như By.id(), By.name() hoặc By.cssSelector() hiếm khi hoạt động. Trong trường hợp này, lựa chọn đáng tin cậy nhất là By.xpath() vì nó duyệt qua các mối quan hệ cha-con bên trong thẻ bảng.

Cách xử lý bảng Web trong Selenium

Hãy xem xét mã HTML bên dưới để xử lý các bảng web trong Selenium.

Cách viết XPath cho Table trong Selenium

Chúng tôi sẽ sử dụng Xpath để lấy văn bản bên trong ô chứa văn bản “ô thứ tư”.

Cách viết XPath cho Table trong Selenium

Bước 1 – Đặt phần tử gốc (bảng)

Bộ định vị XPath trong WebDriver luôn bắt đầu bằng dấu gạch chéo kép “//” theo sau là phần tử cha.. Vì chúng ta đang làm việc với các bảng web trong Selenium, phần tử cha phải luôn là nhãn. Phần đầu tiên của chúng tôi Selenium Do đó, bộ định vị bảng XPath phải bắt đầu bằng “//table”.

Selenium Ví dụ về bảng Web

Bước 2 – Thêm các phần tử con

Phần tử nằm ngay bên dưới là , Vì thế là con của Ngược lại, là cha mẹ của Tất cả các phần tử con trong XPath được đặt ở bên phải phần tử cha, được phân tách bởi một dấu gạch chéo “/” như hình bên dưới.

Selenium Ví dụ về bảng Web

Bước 3 – Thêm vị từ

Cái phần tử chứa hai thẻ. Hai cái này thẻ là con của , Vì thế là cha mẹ của cả hai. Hai Các phần tử là anh chị em ruột. Anh chị em ruột là những phần tử con có chung cha mẹ..

Để đến được Để chứa “ô thứ tư”, trước tiên chúng ta phải truy cập vào 2 Không phải cái đầu tiên. Chỉ cần viết “//table/tbody/tr” sẽ nhắm đến cái đầu tiên. nhãn.

Vậy làm thế nào để chúng ta truy cập vào cái thứ hai? Câu trả lời là sử dụng Dự đoán. Vị ngữ là các số hoặc thuộc tính HTML được đặt trong dấu ngoặc vuông “[ ]” dùng để phân biệt một phần tử con với các phần tử con khác của nó.Vì hàng chúng ta cần là hàng thứ hai, nên chúng ta sử dụng “[2]” làm vị ngữ.

 Selenium Ví dụ về bảng Web

Nếu bỏ qua mệnh đề điều kiện, XPath sẽ trả về phần tử anh em ruột đầu tiên. Do đó, một trong hai đoạn mã XPath dưới đây sẽ tìm thấy phần tử anh em ruột đầu tiên. .

Selenium Bảng Web sử dụng Xpath

Bước 4 – Thêm các phần tử con thành công bằng cách sử dụng các vị từ thích hợp

Yếu tố tiếp theo chúng ta cần là yếu tố thứ hai. Áp dụng các quy tắc từ Bước 2 và 3, ta thu được XPath như hình bên dưới.

Bảng Web trong Selenium sử dụng Xpath

Giờ đây, khi đã có bộ định vị XPath chính xác, chúng ta có thể truy cập vào ô và đọc nội dung bên trong bằng đoạn mã dưới đây. Điều này giả định rằng bạn đã lưu trang HTML dưới dạng “newhtml.html” trong ổ C của mình.

Bảng Web trong Selenium sử dụng Xpath

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Bảng Web trong Selenium sử dụng Xpath

Truy cập các bảng lồng nhau

Các nguyên tắc tương tự cũng áp dụng cho các bảng lồng nhau. Bảng lồng nhau là bảng được đặt bên trong một bảng khác.. Một ví dụ đã được biểu diễn ở dưới.

Cách truy cập các bảng lồng nhau trong Selenium

Để truy cập vào ô chứa văn bản “4-5-6” bằng cách sử dụng các ý tưởng về quan hệ cha/con và điều kiện từ phần trước, chúng ta có thể tạo XPath như hình bên dưới.

Cách truy cập các bảng lồng nhau trong Selenium

Đoạn mã WebDriver bên dưới truy xuất nội dung văn bản bên trong ô được chọn.

Truy cập các bảng lồng nhau trong Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Kết quả bên dưới xác nhận rằng bảng bên trong đã được truy cập thành công.

Truy cập các bảng lồng nhau trong Selenium

Sử dụng thuộc tính làm vị ngữ

Nếu phần tử nằm sâu bên trong HTML, khiến việc đếm các phần tử cùng cấp trở nên khó khăn, chúng ta có thể sử dụng thuộc tính duy nhất của phần tử đó thay thế.

Trong ví dụ bên dưới, ô "New York đến Chicago" được đặt sâu bên trong. Mercury Trang chủ các tour du lịch.

Selenium Ví dụ về bảng web sử dụng Thuộc tính làm Vị ngữ

Selenium Ví dụ về bảng web sử dụng Thuộc tính làm Vị ngữ

Chúng ta có thể sử dụng thuộc tính duy nhất của bảng (width=”270″) làm vị ngữ. Các thuộc tính được sử dụng làm vị từ bằng cách thêm ký hiệu @ vào trước chúngTrong ví dụ trên, ô “New York đến Chicago” nằm ở vị trí đầu tiên. của thứ tư Vì vậy, XPath của chúng ta sẽ trông giống như hình bên dưới.

Selenium Ví dụ về bảng web với Thuộc tính là Vị ngữ

Hãy nhớ rằng khi bạn đặt XPath vào bên trong JavaHãy sử dụng dấu gạch chéo ngược để thoát khỏi dấu ngoặc kép xung quanh "270" để chuỗi By.xpath() không bị kết thúc sớm.

Selenium Ví dụ về bảng web với Thuộc tính là Vị ngữ

Bây giờ chúng ta đã sẵn sàng truy cập vào ô đó bằng mã bên dưới.

Selenium Ví dụ về bảng web với Thuộc tính là Vị ngữ

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium Ví dụ về bảng web với Thuộc tính là Vị ngữ

Phím tắt: Sử dụng Kiểm tra phần tử để truy cập các bảng trong Selenium

Nếu khó lấy chỉ mục hoặc thuộc tính của một phần tử, cách nhanh nhất để tạo XPath là sử dụng chức năng Kiểm tra phần tử (Inspect Element) trong công cụ dành cho nhà phát triển của các trình duyệt hiện đại.

Hãy xem xét ví dụ dưới đây từ... Mercury Trang chủ các tour du lịch.

Selenium Ví dụ về bảng web với Thuộc tính là Vị ngữ

Bước 1

Nhấp chuột phải vào ô cần chọn và chọn "Kiểm tra" để xem đường dẫn DOM, sau đó sao chép toàn bộ XPath.

Selenium Ví dụ về bảng web với Thuộc tính là Vị ngữ

Bước 2

Tìm phần tử cha “bảng” đầu tiên và xóa mọi thứ ở bên trái của nó.

Selenium Ví dụ về bảng web với Thuộc tính là Vị ngữ

Bước 3

Thêm tiền tố "//" vào phần XPath còn lại và sao chép nó vào mã WebDriver của bạn.

Selenium Ví dụ về bảng web có Thuộc tính

Đoạn mã WebDriver bên dưới truy xuất văn bản bên trong của phần tử lồng sâu.

Selenium Ví dụ về bảng web có Thuộc tính

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Cách đếm số hàng và cột trong bảng web động

Các bảng dữ liệu động trên web, chẳng hạn như bảng điều khiển hoặc kết quả tìm kiếm, hiển thị số lượng hàng khác nhau mỗi khi tải trang. Để xử lý chúng, hãy sử dụng findElements để lấy mọi thứ vào một List, sau đó lặp qua để đọc từng ô. Đoạn mã bên dưới đếm số hàng và đọc từng ô trong một bảng có id là “customers”.

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

Bọc thiết bị định vị bằng một WebDriverWait với visibilityOfAllElementsLocatedBy Khi bảng được tải bằng AJAX, điều này giúp ngăn ngừa tình trạng tham chiếu phần tử lỗi thời trên các lưới hiển thị chậm.

Selenium 4 Bộ định vị tương đối cho bảng trên web

Selenium Phiên bản 4 giới thiệu các bộ định vị tương đối nhắm mục tiêu các phần tử theo vị trí trực quan. Chúng hữu ích khi chỉ mục XPath bị lỗi do các hàng được sắp xếp lại. Các phương thức above(), below(), toLeftOf(), toRightOf()near() Tất cả đều chấp nhận một WebElement neo.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

Các bộ định vị tương đối vẫn dễ đọc ngay cả khi thứ tự cột thay đổi. Kết hợp chúng với các lệnh chờ rõ ràng để đạt được hiệu quả tốt nhất trên các trang dựa trên dữ liệu.

Công cụ AI để xử lý bảng dữ liệu động trên web

Các nền tảng kiểm thử hỗ trợ bởi AI giúp giảm thiểu việc bảo trì thiết bị định vị trên các lưới điện thường xuyên thay đổi. Các công cụ như Testim, mablChức năng hóa Chúng sử dụng thị giác máy tính kết hợp với mô hình DOM để phát hiện sự dịch chuyển cột và định vị tự phục hồi. Chúng xác định các hàng dựa trên văn bản tiêu đề và sự tương đồng giữa các ô thay vì các chỉ mục XPath cố định.

Cho tinh khiết Selenium các dự án, thư viện như Healenium Bọc WebDriver và viết lại các bộ định vị bị lỗi trong quá trình chạy. Kết hợp các công cụ này với WebDriverWait để giữ cho các tập lệnh bảng động ổn định mà không cần viết lại các bộ chọn sau mỗi lần thay đổi giao diện người dùng.

Tổng kết

  • By.xpath() là cách đáng tin cậy nhất để truy cập các ô của Bảng Web. Selenium.
  • Nếu việc đếm số anh chị em ruột khó khăn, hãy sử dụng một thuộc tính duy nhất làm vị ngữ, được đặt tiền tố bằng ký hiệu @.
  • findElements trả về một List Hỗ trợ việc đếm số hàng trong các bảng động.
  • Selenium 4 bộ định vị tương đối (trên, dưới, gần) giúp giảm sự phụ thuộc vào XPath vị trí.
  • Chức năng "Kiểm tra phần tử" trong DevTools giúp tăng tốc quá trình tạo XPath cho các ô nằm sâu bên trong.
  • Các công cụ AI như TestimCác thiết bị định vị tự phục hồi Mabl và Healenium dùng để thay đổi lưới điện.

Câu Hỏi Thường Gặp

Bảng trên Web trong Selenium Đây là một WebElement hiển thị dữ liệu dạng bảng theo hàng và cột. Nó có thể là tĩnh hoặc động. Người kiểm thử truy cập các ô của nó thông qua các phương thức của WebElement kết hợp với XPath hoặc bộ định vị CSS vì các bảng hiếm khi hiển thị ID duy nhất trên từng ô riêng lẻ.

Hầu hết các ô trong bảng không có thuộc tính id hoặc name, vì vậy By.id() và By.name() sẽ không hoạt động. XPath duyệt qua cấu trúc cha-con của các phần tử table, tbody, tr và td, điều này làm cho nó trở thành công cụ định vị đáng tin cậy nhất cho các ô.

Sử dụng driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size() để đếm hàng và //table[@id='tbl']//tr[1]/td để đếm cột. Phương thức findElements trả về một List Hỗ trợ hàm size() để tính tổng nhanh các hàng.

Selenium Phiên bản 4 giới thiệu các bộ định vị tương đối như above(), below(), toLeftOf(), toRightOf() và near(). Chúng giúp nhắm mục tiêu vào các ô được định vị xung quanh một ô neo đã biết, điều này rất hữu ích khi chỉ mục XPath thay đổi trong các bảng động.

Lặp qua các hàng bằng findElements, sau đó đọc từng ô bằng getText(). Xây dựng XPath động bằng cách nối chuỗi, ví dụ như //tr[“+i+”]/td[“+j+”]. Chờ bảng tải xong bằng WebDriverWait trước khi đọc giá trị.

Đúng vậy. Các công cụ được hỗ trợ bởi trí tuệ nhân tạo như... TestimMabl và Functionize sử dụng thị giác máy tính và mô hình DOM để phát hiện ranh giới bảng, suy luận tiêu đề và tự động sửa lỗi định vị khi các cột dịch chuyển. Điều này giúp giảm thiểu việc bảo trì XPath cho các bảng điều khiển động.

Các mô hình AI học các mẫu hàng từ các lần chạy trước và khớp các ô bằng cách sử dụng độ tương đồng văn bản thay vì các chỉ mục cố định. Khi một hàng di chuyển hoặc một cột được sắp xếp lại, bộ định vị AI vẫn tìm thấy mục tiêu mà không cần viết lại XPath.

`findElement` trả về một `WebElement` duy nhất và ném ngoại lệ `NoSuchElementException` nếu không tìm thấy. `findElements` trả về một danh sách. và trả về một danh sách rỗng nếu không tìm thấy kết quả phù hợp. Hãy sử dụng `findElements` khi tìm kiếm.ping trên các hàng hoặc cột của bảng.

Tóm tắt bài viết này với: