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.