Selenium WebDriver trên Python – Ví dụ
Chào các bạn, như ở phần trước, mình có demo cho các bạn một kịch bản kiểm thử đơn giản với Selenium WebDriver trên Python. Phần này, mình sẽ đi step by step, giải thích từng câu lệnh trong ví dụ để các bạn có thể hiểu rõ hơn cách hoạt động của Selenium trên Python.
Kịch bản kiểm thử
B1. Mở trình duyệt Firefox
B2. Mở trình duyệt Internet Explorer
B3. Trên trình duyệt Firefox, mở trang www.google.com
B4. Trên trình duyệt IE, mở trang www.bing.com
B5. Tìm “VNTesters” trên Google và kiểm tra có một liên kế với tiêu đề “VNTesters | CHIA SẺ ĐỂ THÀNH CÔNG HƠN” được trả về
B6. Tìm “VNTesters” trên Bing và kiểm tra có một liên kế với tiêu đề “VNTesters | CHIA SẺ ĐỂ THÀNH CÔNG HƠN” được trả về
Selenium WebDriver trên Python – Step by step
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException import unittest, time, re
“from…import…” hay “import…” là lệnh của Python, nó được dùng để khai báo các thư viện mà file .py hiện hành sử dụng
class A(unittest.TestCase):
Từ khoá “class” khai báo bắt đầu một lớp trong Python. Đoạn “(unittest.TestCase)” này dùng để khai báo lớp A của chúng ta là một lớp kiểm thử. Các bạn có thể xem thêm ở bài “PyUnit – Kiểm thử tự động”.
def setUp(self):
“def” là từ khoá để khai báo một phương thức trong Python. setUp là phương thức đặc biệt của PyUnit, dùng để thực thi các điều kiện cần thiết trước khi thực thi kịch bản kiểm thử chính thức.
self.driver_ff = webdriver.Firefox()
Tạo ra một đối tượng trình duyệt Firefox và gắn cho biến driver_ff
self.driver_ie = webdriver.Ie("E:\IEDriverServer.exe")
Tạo ra một đối tượng trình duyệt IE và gắn cho biến driver_ie. Như mình đã đề cập đến ở phần “Selenium IDE – Record and Playback trên nhiều trình duyệt”, để thực thi được mã lệnh của Selenium trên trình duyệt IE, chúng ta phải có IEDriverServer.
self.driver_ff.implicitly_wait(30) self.driver_ie.implicitly_wait(30)
Xác định thời gian chờ cho hai trình duyệt là 30 giây. Đây là thời gian tối đa mà trình duyệt sẽ chờ cho đối tượng UI hiển thị trên trang web.
def test_demo(self):
Khai báo một phương thức kiểm thử. Đây chính là mã chính kịch bản kiểm thử của chúng ta.
driver_ff = self.driver_ff driver_ie = self.driver_ie
Khai báo hai biến địa phương (local) để sử dụng trong phương thức từ hai biến toàn cục (global) – driver_ff và driver_ie
driver_ff.get("http://www.google.com")
Mở trang www.google.com trên trình duyệt Firefox
driver_ie.get("http://www.bing.com")
Mở trang www.bing.com trên trình duyệt IE
driver_ff.find_element_by_id("gbqfq").send_keys("VNTesters") driver_ff.find_element_by_name("btnG").click()
Tìm “VNTesters” trên trình duyệt Firefox với Google
self.assertTrue(self.is_element_present(driver_ff, By.LINK_TEXT, "VNTesters | CHIA SẺ ĐỂ THÀNH CÔNG HƠN"))
Kiểm tra một đối tượng UI với tiêu đề “VNTesters | CHIA SẺ ĐỂ THÀNH CÔNG HƠN” tồn tại trên trình duyệt Firefox
driver_ie.find_element_by_id("sb_form_q").send_keys("VNTesters") driver_ie.find_element_by_id("sb_form_go").click()
Tìm “VNTesters” trên trình duyệt IE với Bing
self.assertTrue(self.is_element_present(driver_ie, By.LINK_TEXT, "VNTesters | CHIA SẺ ĐỂ THÀNH CÔNG HƠN"))
Kiểm tra một đối tượng UI với tiêu đề “VNTesters | CHIA SẺ ĐỂ THÀNH CÔNG HƠN” tồn tại trên trình duyệt IE
def is_element_present(self, driver, how, what):
Khai báo một phương thức cơ bản, phương thức này dùng để kiểm tra một đối tượng UI có tồn tại trên trình duyệt hay không. driver cho biết đang kiểm tra trên trình duyệt nào. how cho biết phương thức tìm kiếm đối tượng UI. what cho biết thuộc tính của đối tượng UI cần tìm.
try: driver.find_element(by=how, value=what) except NoSuchElementException, e: return False return True
“try…except…” là từ khoá dùng để bẫy lỗi của Python. Nếu không tìm thấy đối tượng UI thì trả về giá trị False. Ngược lại, trả về True
def tearDown(self):
tearDown là phương thức đặc biệt, ngược lại với phương thức setUp. Nó dùng để thực thi các điều kiện sau khi thực thi kịch bản kiểm thử.
self.driver_ff.quit() self.driver_ie.quit()
Đóng trình duyệt FireFox và IE
if __name__ == "__main__": unittest.main()
Đây là dòng lệnh bên ngoài lớp kiểm thử – lớp A. Hai dòng lệnh này hỗ trợ chúng ta thực thi file .py trực tiếp từ console hoặc từ file.