Kiểm tra tính đúng đắn trong Selenium bằng các phương pháp xác minh đa dạng

Trong tự động hóa kiểm thử web với Selenium, việc xác minh trạng thái ứng dụng không chỉ dừng lại ở việc kiểm tra giá trị đầu ra — mà còn bao gồm việc kiểm tra hành vi, cấu trúc và khả năng hiển thị của giao diện. Các kỹ thuật xác minh phổ biến được chia thành ba nhóm chính: xác minh thuộc tính trang, xác minh sự hiện diện của phần tử, và xác minh tài nguyên ngoài như ảnh và liên kết.

Xác minh thuộc tính trang

Đây là lớp kiểm tra cơ bản nhất, dùng để đảm bảo trình duyệt đã tải đúng nội dung mong đợi. Ba thuộc tính thường được kiểm tra là tiêu đề trang (title), URL hiện tại (current_url) và mã nguồn HTML (page_source). Việc kiểm tra này giúp phát hiện sớm các lỗi chuyển hướng sai, lỗi 404 hoặc tải nhầm trang.
from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.find_element("link text", "Tin tức").click()
browser.switch_to.window(browser.window_handles[-1])

# Kiểm tra tiêu đề chứa cụm từ mong muốn
assert "Tin tức Baidu" in browser.title

# Kiểm tra URL chính xác
assert browser.current_url == "https://news.baidu.com/"

# Đảm bảo trang không trả về thông báo lỗi
assert "404" not in browser.page_source and "Not Found" not in browser.page_source

browser.quit()

Xác minh sự hiện diện của phần tử

Không phải lúc nào phần tử cũng xuất hiện ngay lập tức — đặc biệt khi có tải động (AJAX), hiệu ứng CSS hoặc render chậm. Do đó, cần kết hợp giữa xử lý ngoại lệ và chiến lược chờ chủ động. Cách tiếp cận an toàn là sử dụng find_elements() thay vì find_element(), vì hàm đầu tiên luôn trả về danh sách (có thể rỗng) thay vì ném ngoại lệ:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.maximize_window()

# Cách 1: Dùng find_elements để kiểm tra tồn tại
settings_items = browser.find_elements(By.ID, "s-usersetting-top")
if settings_items:
    print("Nút 'Cài đặt' đã xuất hiện.")
    # Thực hiện tương tác nếu cần
else:
    print("Không tìm thấy nút 'Cài đặt'.")
    raise AssertionError("Yêu cầu kiểm thử thất bại: phần tử không tồn tại.")

# Cách 2: Chờ chủ động cho phần tử xuất hiện (tối đa 8 giây)
try:
    advanced_search_link = WebDriverWait(browser, 8).until(
        EC.presence_of_element_located((By.LINK_TEXT, "Tìm kiếm nâng cao"))
    )
    advanced_search_link.click()
except Exception as e:
    raise AssertionError(f"Không tìm thấy liên kết 'Tìm kiếm nâng cao' sau thời gian chờ: {e}")

browser.quit()

Xác minh ảnh và liên kết bên ngoài

Thay vì chỉ kiểm tra thuộc tính src hay href, ta nên thực hiện yêu cầu HTTP trực tiếp tới tài nguyên để xác minh tính khả dụng. Tuy nhiên, trong môi trường Selenium thuần túy, một cách đơn giản là điều hướng tới URL đó và kiểm tra phản hồi — miễn là trang lỗi (ví dụ 404) có dấu hiệu nhận diện rõ ràng trong mã nguồn.
from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://www.baidu.com")

# Lấy URL logo và kiểm tra khả năng hiển thị
logo_img = browser.find_element(By.ID, "s_lg_img")
logo_url = logo_img.get_attribute("src")
print(f"URL ảnh logo: {logo_url}")

browser.get(logo_url)
assert "404" not in browser.page_source
browser.back()

# Kiểm tra liên kết 'hao123'
hao123_elem = browser.find_element(By.LINK_TEXT, "hao123")
hao123_url = hao123_elem.get_attribute("href")
print(f"URL hao123: {hao123_url}")

browser.get(hao123_url)
assert "Page Not Found" not in browser.page_source and "404" not in browser.page_source
browser.back()

browser.quit()

Các loại xác minh nâng cao khác

- Kiểm tra màu sắc và CSS: Có thể trích xuất giá trị CSS (ví dụ color, background-color) qua value_of_css_property() và so sánh với giá trị kỳ vọng. - Kiểm tra bố cục hình ảnh: Lưu ảnh chụp màn hình vùng quan trọng, sau đó dùng thư viện như OpenCV hoặc Pillow để so sánh độ tương đồng pixel hoặc phát hiện lệch vị trí. - Xác minh nội dung ảnh: Áp dụng thuật toán nhận dạng ảnh (như SSIM hoặc histogram comparison) để kiểm tra xem một ảnh có khớp với mẫu chuẩn hay không.

Thẻ: selenium webdriver ui-testing assertion web-automation

Đăng vào ngày 17 tháng 6 lúc 07:55