Cơ bản về Selenium WebDriver - 78winđăngnhập
Ngày 21 tháng 78win+đăng+nhập 4 năm 2023 | Máy tính
Selenium là một dự án mã nguồn mở hỗ trợ tự động hóa trình duyệt web, cho phép bạn mô phỏng các hành vi tương tác của người dùng với trình duyệt. Bài viết này sẽ chia thành hai phần: trước tiên giới thiệu các thành phần cấu tạo của Selenium; sau đó sử dụng một ví dụ thực tế để minh họa cách sử dụng WebDriver.
Toàn bộ các ví dụ mã nguồn trong bài đều được viết bằng ngôn ngữ lập trình Python. Ngoài ra, dưới đây là thông tin phiên bản hệ điều hành, trình duyệt và Selenium mà bài viết sử dụng:
- Hệ điều hành: MacOS
- Trình duyệt: Chrome
- Phiên bản Selenium: 4.9.0
1. Các thành phần cấu tạo của Selenium
Trước khi bắt đầu sử dụng Selenium, cần hiểu rõ quy trình tự động hóa bao gồm những thành phần chính nào. Đó là WebDriver (thư viện điều khiển trình duyệt do Selenium cung cấp cho từng ngôn ngữ lập trình), Driver (trình điều khiển của trình duyệt) và Browser (trình duyệt).
Quy trình tương tác giữa ba thành phần này có thể thấy qua hình ảnh sau: !Cấu trúc các thành phần của Selenium
Như hình trên, WebDriver giao tiếp hai chiều với Browser thông qua Driver. Cụ thể, WebDriver gửi lệnh đến Browser thông qua Driver, sau đó nhận phản hồi từ Browser thông qua Driver.
Đáng chú ý, hình trên chỉ minh họa trường hợp WebDriver, Browser và Driver nằm cùng máy chủ. Tuy nhiên, nếu sử dụng Selenium Grid, WebDriver có thể kết nối với Browser và Driver ở các máy chủ khác nhau. Để tìm hiểu thêm về Selenium Grid và cách thiết lập nó, bạn có thể tham khảo bài viết trước của tôi: "Thiết lập và sử dụng Selenium Grid".
2. Sử dụng cơ bản của WebDriver
Hiểu được chức năng của WebDriver và cách nó tương tác với trình duyệt, chúng ta sẽ bắt đầu học cách sử dụng WebDriver cơ bản.
2.1. Cài đặt Driver
Từ phần "Cấu trúc các thành phần của Selenium", chúng ta biết rằng WebDriver phải thông qua Driver để tương tác với Browser. Vì vậy, trước khi sử dụng WebDriver để điều khiển trình duyệt, cần phải cài đặt Driver phù hợp với trình duyệt.
Trong số các trình duyệt chính được Selenium hỗ trợ, tất cả trừ Internet Explorer đều có Driver do chính nhà sản xuất trình duyệt cung cấp. Vì bài viết này sử dụng trình duyệt Chrome làm ví dụ, dưới đây sẽ soi kèo bóng đá hôm nay hướng dẫn cách tải xuống và cài đặt ChromeDriver.
Hãy truy cập vào trang tải xuống chính thức của ChromeDriver, chọn phiên bản tương ứng với phiên bản Chrome đang cài đặt trên máy.
Các bước tải xuống và cài đặt như sau:
1curl -O
2unzip chromedriver_mac64.zip
3sudo mkdir /usr/local/chromedriver
4sudo mv chromedriver /usr/local/chromedriver/
Tiếp theo, chỉnh sửa tệp /etc/profile
để thêm thư mục chứa chromedriver
vào biến môi trường PATH
.
1sudo vi /etc/profile
2# chromedriver
3export PATH=$PATH:/usr/local/chromedriver/
Cuối cùng, thử chạy lệnh chromedriver
để kiểm tra xem trình điều khiển đã được cài đặt thành công chưa.
1source /etc/profile
2chromedriver
3...
4ChromeDriver đã khởi động thành công.
2.2. Sử dụng cơ bản của WebDriver
Bây giờ, chúng ta sẽ bắt đầu sử dụng WebDriver để thực hiện các thao tác cơ bản như tạo đối tượng trình duyệt, mở trang web, định vị phần tử, nhập nội dung và nhấn nút.
Trang web được sử dụng trong ví dụ này là một trang mẫu Web Form do Selenium cung cấp.
Trang này bao gồm các ô nhập văn bản, hộp thả xuống, khung tải lên tệp, hộp chọn ngày và nhiều thành phần khác. Hình chụp màn hình trang web như sau: !Ví dụ trang Web Form của Selenium
Dựa trên biểu mẫu trên trang, chúng ta sẽ viết một kịch bản kiểm thử Python (selenium_form_test.py
) để nhập dữ liệu và gửi biểu mẫu.
Mã nguồn như sau:
1from unittest import TestCase
2from selenium import webdriver
3from selenium.webdriver.common.by import By
4from selenium.webdriver.support.wait import WebDriverWait
5from selenium.webdriver.support import expected_conditions as EC
6from selenium.webdriver.support.select import Select
7
8class TestSeleniumForm(TestCase):
9 def setUp(self) -> None:
10 # Mở Chrome ở chế độ ẩn danh
11 options = webdriver.ChromeOptions()
12 options.add_argument('--incognito')
13 self.browser = webdriver.Chrome(options=options)
14 self.addCleanup(self.browser.quit)
15
16 def test_web_form(self) -> None:
17 # Mở trang biểu mẫu
18 self.browser.get('
19 self.assertEqual(self.browser.title, 'Biểu mẫu web')
20
21 # Nhập văn bản
22 text_input = self.browser.find_element(By.ID, 'my-text-id')
23 text_input.send_keys('Selenium')
24
25 # Nhập mật khẩu
26 password = self.browser.find_element(By.NAME, 'my-password')
27 password.send_keys('Selenium')
28
29 # Chọn giá trị Two từ hộp thả xuống
30 dropdown = Select(self.browser.find_element(By.NAME, 'my-select'))
31 dropdown.select_by_value('2')
32
33 # Chọn tập tin
34 file_input = self.browser.find_element(By.CSS_SELECTOR, 'input[name="my-file"]')
35 file_input.send_keys('/tmp/file.txt')
36
37 # Chọn ngày
38 date_input = self.browser.find_element(By.XPATH, '//input[@name="my-date"]')
39 date_input.send_keys('21/04/2023')
40
41 # Nhấn nút Submit
42 submit_button = self.browser.find_element(By.XPATH, '//button[@type="submit"]')
43 submit_button.click()
44
45 # Đợi chuyển sang trang đã gửi
46 WebDriverWait(self.browser, 10).until(EC.title_is('Biểu mẫu web - trang đích'))
47
48 # Kiểm tra kết quả
49 message = self.browser.find_element(By.ID, 'message').text
50 self.assertEqual(message, 'Đã nhận!')
Mã nguồn Python trên sử dụng thư viện Selenium. Trước khi chạy mã, cần cài đặt module selenium
.
Lệnh cài đặt như sau:
1# Để tăng tốc độ tải xuống, sử dụng nguồn PyPI từ Đại học Thanh Hoa
2python3 -m pip install -i selenium
Sau khi cài đặt xong, có thể chạy tệp kiểm thử (selenium_form_test.py
).
Lệnh chạy và kết quả như sau:
1python3 -m unittest selenium_form_test.TestSeleniumForm
2.
3----------------------------------------------------------------------
4Chạy 1 bài kiểm tra trong 21.740 giây
5OK
Kết quả thực thi có thể thấy qua hình ảnh sau: !Kiểm thử tự động biểu mẫu Web Form với Selenium
Như vậy, chúng ta đã sử dụng thành công WebDriver để tự động điền và gửi biểu mẫu.
Dưới đây là tổng hợp một số phương pháp quan trọng của WebDriver mà chúng ta đã sử dụng:
- Tạo đối tượng browser Có thể chỉ định tham số để tạo một phiên trình duyệt cụ thể.
1self.browser = webdriver.Chrome(options=options)
- Mở trang web
Sử dụng phương thức
get
để mở một URL.
1self.browser.get('
- Định vị phần tử Có thể sử dụng ID, NAME, CSS Selector hoặc XPATH để định vị phần tử trên trang.
1self.browser.find_element(By.ID, 'my-text-id')
2self.browser.find_element(By.NAME, 'my-password')
3self.browser.find_element(By.CSS_SELECTOR, 'input[name="my-file"]')
4self.browser.find_element(By.XPATH, '//input[@name="my-date"]')
- Thực hiện thao tác trên phần tử Có thể nhập nội dung hoặc nhấn nút.
1text_input.send_keys('Selenium')
2submit_button.click()
- Chờ phần tử xuất hiện
Sử dụng
WebDriverWait
để chờ một phần tử xuất hiện trên trang.
1WebDriverWait(self.browser, 10).until(EC.title_is('Biểu mẫu web - trang đích'))
- Huỷ đối tượng browser
Cuối cùng, cần gọi phương thức
quit
để đóng cửa sổ trình duyệt và giải phóng tài nguyên.
1self.browser.quit()