Trong bài trước, chúng ta đã xem xét các chiến lược điều hướng khác nhau. Chúng ta sẽ xem cách kiểm soát các thao tác bàn phím trong bài đăng này
Selenium cho phép chúng ta giả lập các thao tác trên bàn phím như nhấn phím, xóa nội dung đã viết. Ngoài ra, chúng ta có thể sử dụng các phím bổ trợ như CTRL hoặc SHIFT để thực hiện một số lần nhấn phím ghép/kết hợp với sự trợ giúp của lớp
driver = webdriver.Firefox[]5chuỗi hành động
Chuỗi hành động cho phép các tương tác như di chuyển chuột, hành động của nút chuột, nhấn phím và kéo và thả. Khi bạn gọi các phương thức cho các hành động trên đối tượng
driver = webdriver.Firefox[]6, các hành động được lưu trữ trong hàng đợi trong đối tượng
driver = webdriver.Firefox[]6. Khi bạn gọi
driver = webdriver.Firefox[]8, các sự kiện sẽ được kích hoạt theo thứ tự chúng được xếp hàng.
driver = webdriver.Firefox[]6 có thể được sử dụng theo mô hình chuỗi hoặc xếp hàng từng cái một, sau đó được thực hiện
Đối với trường hợp sau
- Phiên bản
driver = webdriver.Firefox[]
6 được tạo bằng cách chuyển phiên bản WebDriver - Một hành động[move_to_element] được thêm vào hàng đợi hành động cho thành phần menu
- Một hành động khác [nhấp chuột] được thêm vào hàng đợi hành động cho phần tử hidden_submenu
- Khi
driver = webdriver.Firefox[]
8 được gọi, hành động đầu tiên được thêm vào hàng đợi được thực thi để di chuyển đến menu chính - Sau đó, hành động thứ hai được thêm vào được thực hiện để nhấp vào phần tử menu con
bàn phím
send_keys
Phương thức
driver.get["//www.python.org"]2 nhập một chuỗi khóa vào phần tử. Các phím bổ trợ có sẵn từ lớp
driver.get["//www.python.org"]3. Nó có thể lấy một chuỗi hoặc một khóa từ lớp
driver = webdriver.Firefox[]50 làm tham số
Ví dụ sau điền vào trường nhập thư bằng “example@somedomain. giá trị com”
key_down
driver = webdriver.Firefox[]51 được sử dụng để mô phỏng việc nhấn phím bổ trợ [Ctrl, Alt, Shift] mà không nhả phím
Ví dụ này viết đoạn mã sau vào vùng văn bản và chọn nó bằng tổ hợp
driver = webdriver.Firefox[]52
def foo[]:
pass
key_up
driver = webdriver.Firefox[]53 được sử dụng để mô phỏng hành động nhấn phím hoặc nhả phím của phím bổ trợ được nhấn bằng phương pháp
driver = webdriver.Firefox[]51
Ví dụ sau tìm kiếm “SELENIUM webdriver” trên Google. Nó sử dụng phím SHIFT để viết selen bằng chữ hoa
selen. mô-đun webdriver cung cấp tất cả các triển khai WebDriver. Các triển khai WebDriver được hỗ trợ hiện tại là Firefox, Chrome, IE và Remote. Lớp Keys cung cấp các phím trong bàn phím như RETURN, F1, ALT, v.v. Lớp By được sử dụng để định vị các thành phần trong tài liệu
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By
Tiếp theo, phiên bản Firefox WebDriver được tạo
driver = webdriver.Firefox[]
Người lái xe. phương thức get sẽ điều hướng đến một trang được cung cấp bởi URL. WebDriver sẽ đợi cho đến khi trang được tải đầy đủ [nghĩa là sự kiện “onload” đã kích hoạt] trước khi trả lại quyền kiểm soát cho bài kiểm tra hoặc tập lệnh của bạn. Xin lưu ý rằng nếu trang của bạn sử dụng nhiều AJAX khi tải thì WebDriver có thể không biết khi nào nó đã tải xong
driver.get["//www.python.org"]
Dòng tiếp theo là một xác nhận để xác nhận rằng tiêu đề có từ “Python” trong đó
assert "Python" in driver.title
WebDriver cung cấp một số cách để tìm phần tử bằng phương thức find_element. Ví dụ: phần tử văn bản đầu vào có thể được định vị theo thuộc tính tên của nó bằng cách sử dụng phương thức find_element và sử dụng By. NAME làm tham số đầu tiên. Giải thích chi tiết về cách tìm phần tử có sẵn trong chương Định vị phần tử .
elem = driver.find_element[By.NAME, "q"]
Tiếp theo, chúng tôi đang gửi các phím, điều này tương tự như việc nhập các phím bằng bàn phím của bạn. Các khóa đặc biệt có thể được gửi bằng lớp Keys được nhập từ Selenium. webdriver. phổ thông. phím. Để an toàn, trước tiên chúng tôi sẽ xóa mọi văn bản được điền sẵn trong trường nhập [e. g. “Tìm kiếm”] để nó không ảnh hưởng đến kết quả tìm kiếm của chúng tôi
elem.clear[] elem.send_keys["pycon"] elem.send_keys[Keys.RETURN]
Sau khi gửi trang, bạn sẽ nhận được kết quả nếu có bất kỳ. Để đảm bảo rằng một số kết quả được tìm thấy, hãy khẳng định
assert "No results found." not in driver.page_source
Cuối cùng, cửa sổ trình duyệt được đóng lại. Bạn cũng có thể gọi phương thức thoát thay vì đóng. Phương thức thoát sẽ thoát khỏi trình duyệt trong khi phương thức đóng sẽ đóng một tab, nhưng nếu chỉ một tab được mở, theo mặc định, hầu hết các trình duyệt sẽ thoát hoàn toàn
________số 8
2. 3. Sử dụng Selenium để viết test¶
Selenium chủ yếu được sử dụng để viết các trường hợp thử nghiệm. Bản thân gói Selenium không cung cấp công cụ/khuôn khổ thử nghiệm. Bạn có thể viết các trường hợp thử nghiệm bằng mô-đun unittest của Python. Các tùy chọn khác cho một công cụ/khung là pytest và nose
Trong chương này, chúng tôi sử dụng unittest làm khung lựa chọn. Đây là ví dụ đã sửa đổi sử dụng mô-đun unittest. Đây là một thử nghiệm cho con trăn. chức năng tìm kiếm tổ chức
python python_org_search.py0
Bạn có thể chạy trường hợp thử nghiệm trên từ trình bao như thế này
python python_org_search.py1
Kết quả trên cho thấy bài kiểm tra đã hoàn thành xuất sắc
Ghi chú. Để chạy thử nghiệm trên trong IPython hoặc Jupyter, bạn nên chuyển một vài đối số cho hàm chính như bên dưới
python python_org_search.py2
2. 4. Hướng dẫn ví dụ¶
Ban đầu, tất cả các mô-đun cơ bản cần thiết đều được nhập. Mô-đun unittest là mô-đun Python tích hợp dựa trên JUnit của Java. Mô-đun này cung cấp khuôn khổ để tổ chức các trường hợp thử nghiệm. selen. mô-đun webdriver cung cấp tất cả các triển khai WebDriver. Các triển khai WebDriver được hỗ trợ hiện tại là. Firefox, Chrome, IE và Điều khiển từ xa. Lớp Keys cung cấp các phím trong bàn phím như RETURN, F1, ALT, v.v. Lớp By được sử dụng để định vị các thành phần trong tài liệu
python python_org_search.py3
Lớp test case được kế thừa từ unittest. Trường hợp thử nghiệm. Kế thừa từ lớp TestCase là cách để nói với mô-đun unittest rằng đây là một trường hợp thử nghiệm
python python_org_search.py4
Phương thức setUp là một phần của quá trình khởi tạo. Phương thức này sẽ được gọi trước mỗi hàm kiểm tra mà bạn sẽ viết trong lớp trường hợp kiểm tra này. Ở đây bạn đang tạo một phiên bản Firefox WebDriver
python python_org_search.py5
Đây là phương pháp trường hợp thử nghiệm. Phương pháp trường hợp thử nghiệm phải luôn bắt đầu bằng kiểm tra ký tự. Dòng đầu tiên bên trong phương thức này tạo tham chiếu cục bộ đến đối tượng trình điều khiển được tạo trong phương thức setUp
python python_org_search.py6
Người lái xe. phương thức get sẽ điều hướng đến một trang được cung cấp bởi URL. WebDriver sẽ đợi cho đến khi trang được tải đầy đủ [nghĩa là sự kiện “onload” đã kích hoạt] trước khi trả lại quyền kiểm soát cho bài kiểm tra hoặc tập lệnh của bạn. Xin lưu ý rằng nếu trang của bạn sử dụng nhiều AJAX khi tải thì WebDriver có thể không biết khi nào nó đã tải xong
driver.get["//www.python.org"]
Dòng tiếp theo là một xác nhận để xác nhận rằng tiêu đề có từ “Python” trong đó
python python_org_search.py8
WebDriver cung cấp một số cách để tìm phần tử bằng phương thức find_element. Ví dụ: phần tử văn bản đầu vào có thể được định vị theo thuộc tính tên của nó bằng phương thức find_element. Giải thích chi tiết về cách tìm phần tử có sẵn trong chương Định vị phần tử .
elem = driver.find_element[By.NAME, "q"]
Tiếp theo, chúng tôi đang gửi các phím, điều này tương tự như việc nhập các phím bằng bàn phím của bạn. Các khóa đặc biệt có thể được gửi bằng lớp Keys được nhập từ Selenium. webdriver. phổ thông. phím
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By0
Sau khi gửi trang, bạn sẽ nhận được kết quả theo tìm kiếm nếu có bất kỳ. Để đảm bảo rằng một số kết quả được tìm thấy, hãy khẳng định
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By1
Phương thức TearsDown sẽ được gọi sau mỗi phương thức kiểm tra. Đây là nơi để thực hiện tất cả các hành động dọn dẹp. Trong phương thức hiện tại, cửa sổ trình duyệt đã đóng. Bạn cũng có thể gọi phương thức thoát thay vì đóng. Phương thức thoát sẽ thoát toàn bộ trình duyệt, trong khi phương thức đóng sẽ đóng một tab, nhưng nếu đó là tab duy nhất được mở, theo mặc định, hầu hết các trình duyệt sẽ thoát hoàn toàn
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By2
Dòng cuối cùng là một số mã tấm nồi hơi để chạy bộ thử nghiệm
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By3
2. 5. Sử dụng Selenium với WebDriver từ xa¶
Để sử dụng WebDriver từ xa, bạn phải chạy máy chủ Selenium. Để chạy máy chủ, sử dụng lệnh này
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By4
Trong khi chạy máy chủ Selenium, bạn có thể thấy một thông báo như thế này
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By5
Dòng trên nói rằng bạn có thể sử dụng URL này để kết nối với WebDriver từ xa. Dưới đây là một số ví dụ