Bạn có biết rằng bạn có thể kiểm soát trình duyệt web của mình bằng Ruby không?
Đá quý Watir cho phép bạn làm điều này.
Và nó đi kèm với toàn bộ sức mạnh của các trình duyệt hiện đại :
- Bạn có thể chụp ảnh màn hình của vùng hiển thị của trang
- Bạn có thể chạy javascript trên bất kỳ trang nào mà không cần phải mở thủ công các công cụ dành cho nhà phát triển và nhập mã vào
- Bạn có thể tìm các liên kết, nhấp vào chúng và thậm chí điền văn bản vào các trường nhập
Tất cả những điều này đều có sẵn cho bạn nhờ Watir &dự án Selenium.
Hãy xem một số ví dụ về mã!
Khởi chạy trình duyệt
Đầu tiên, tạo một đối tượng trình duyệt như sau:
require 'watir' browser = Watir::Browser.new
Thao tác này sẽ mở ra một cửa sổ Chrome trống (giả sử bạn đã cài đặt nó) mà bạn có thể kiểm soát ngay bây giờ.
Ví dụ :
browser.goto("rubyguides.com")
Chrome sẽ điều hướng đến URL này và trang sẽ tải như thể bạn tự nhập URL.
Bây giờ :
Bạn có thể làm bất cứ điều gì bạn thường làm trên trang web bằng chuột và bàn phím.
Giống như tìm một liên kết và nhấp vào nó.
Ví dụ :
browser.link(text: "All Posts").click
Cách tìm phần tử bằng Watir
Bạn có thể tìm thấy các phần tử theo thuộc tính của chúng, như:
- văn bản
- lớp
- id
Các phần tử này có các phương thức phù hợp với tên HTML của chúng, vì vậy nếu bạn đang tìm kiếm thẻ H1, phương pháp là h1
, đối với các đoạn văn, phương thức là p
&đối với hình ảnh, phương thức là img
hoặc images
.
Ví dụ :
browser.h1(text: "Ruby Post Index")
Bạn cũng có thể nhận danh sách các phần tử bằng cách sử dụng số nhiều của tên phương thức.
Ví dụ :
browser.links browser.images browser.h2s
Điều này sẽ cung cấp cho bạn một Watir::AnchorCollection
đối tượng, phản hồi với các phương thức như từng, bản đồ và chèn.
Ví dụ :
browser.links.map(&:href)
Cách đối phó với thời gian chờ và các yếu tố không có mặt
Có thể xảy ra trường hợp một phần tử không có mặt, có thể do phần tử đó chưa được tải vào trang hoặc trang đã thay đổi.
Điều gì xảy ra khi Watir không thể tìm thấy một phần tử ?
Có một khoảng thời gian chờ.
Theo mặc định, thời lượng là 30 giây nhưng bạn có thể thay đổi:
Watir.default_timeout = 10
Khi nó hết hạn, bạn nhận được một Watir::Exception::UnknownObjectException
ngoại lệ.
Nhưng có một cách khác để xử lý điều này!
Bạn có thể kiểm tra xem phần tử có xuất hiện hay không trước khi nhấp vào nó hoặc thực hiện bất kỳ hành động nào khác.
Đây là cách thực hiện :
link = browser.link(text: 'Guides') if link.present? link.click end
Cách Chụp Screnshot
Khi bạn có một trình duyệt đang mở và một trang được tải, bạn có thể chụp ảnh màn hình của nó.
Như thế này :
browser.screenshot.save("/tmp/screen.png")
Thao tác này sẽ lưu hình ảnh của chế độ xem hiện tại.
Tập lệnh đang chạy
Bạn có thể chạy Javascript trong trình duyệt để ảnh hưởng đến trạng thái hiện tại của trang hoặc bạn có thể gọi các hàm Javascript được xác định trên trang đó.
Đây là cách thực hiện :
browser.execute_script "alert('bacon')" # nil
Kết quả?
Cửa sổ cảnh báo có từ “thịt xông khói” 🙂
Chạy mã và lấy lại kết quả :
browser.execute_script "return 1 + 1" # 2
Cách điền các trường đầu vào
Việc điền một trường đầu vào bao gồm hai bước:
- Tìm phần tử
- Gửi chìa khóa
Đây là một ví dụ :
browser.input(id: "search").send_keys("orange juice")
Bây giờ, bạn sẽ phải tìm nút gửi và nhấp vào nút đó.
Phương pháp &Mẹo Watir hữu ích
Watir cung cấp cho bạn quyền truy cập vào một số phương pháp hữu ích.
Ví dụ:lấy URL hiện tại :
browser.url
Nhận danh sách các tab đang mở :
browser.windows
Phóng to cửa sổ hiện tại :
browser.window.maximize
Lấy HTML và văn bản cho trang hiện tại :
browser.text browser.html
Ngoài ra, đây là một mẹo nếu bạn muốn tìm kiếm các phần tử có khớp một phần, bạn có thể sử dụng biểu thức chính quy.
Như thế này :
browser.p(text: /ruby/)
Tóm tắt
Bạn đã biết về Watir trong hướng dẫn này, một viên ngọc Ruby cho phép bạn điều khiển từ xa trình duyệt web để bạn có thể tự động hóa các tác vụ và trích xuất thông tin từ các trang.
Hãy chia sẻ bài viết này nếu bạn thấy hữu ích để nhiều người có thể tìm thấy nó!
Cảm ơn vì đã đọc.