LƯU Ý: hãy gọi 'nhấp chuột' là nhấp chuột của người dùng cuối. 'js click' là nhấp qua JS
Tại sao nhấp vào "qua JavaScript" hoạt động khi nhấp chuột WebDriver thông thường không?
Có 2 trường hợp để điều này xảy ra:
I. Nếu bạn đang sử dụng PhạmtomJS
Sau đó, đây là hành vi phổ biến nhất được biết đến của PhantomJS
. Một số yếu tố đôi khi không thể nhấp vào, ví dụ <div>
. Điều này là do PhantomJS
bản gốc được tạo để mô phỏng công cụ của các trình duyệt (như HTML + CSS ban đầu -> tính toán CSS -> kết xuất). Nhưng nó không có nghĩa là được tương tác như một cách của người dùng cuối (xem, nhấp, kéo). Do đó, PhamtomJS
chỉ được hỗ trợ một phần với tương tác của người dùng cuối.
TẠI SAO KHÔNG NHẤP VÀO CÔNG VIỆC? Đối với một trong hai nhấp chuột, tất cả chúng đều có nghĩa là nhấp chuột. Nó giống như một khẩu súng với 1 nòng và 2 cò súng . Một từ khung nhìn, một từ JS. Vì PhamtomJS
tuyệt vời trong việc mô phỏng công cụ của trình duyệt, một nhấp chuột JS sẽ hoạt động hoàn hảo.
II. Trình xử lý sự kiện của "nhấp chuột" phải liên kết trong khoảng thời gian xấu.
Ví dụ: chúng tôi có một <div>
-> Chúng tôi thực hiện một số tính toán
-> sau đó chúng tôi liên kết sự kiện nhấp vào <div>
.
-> Cộng với một số mã hóa xấu của góc (ví dụ: không xử lý đúng chu kỳ của phạm vi)
Chúng tôi có thể kết thúc với cùng một kết quả. Nhấp vào sẽ không hoạt động, vì WebdoJS cố gắng nhấp vào phần tử khi nó không có trình xử lý sự kiện nhấp.
TẠI SAO KHÔNG NHẤP VÀO CÔNG VIỆC? Nhấp chuột Js giống như tiêm js trực tiếp vào trình duyệt. Có thể với 2 cách,
Nắm tay là thông qua bảng điều khiển devtools (vâng, WebdoJS không giao tiếp với bảng điều khiển của devtools).
Thứ hai là tiêm một <script>
thẻ trực tiếp vào HTML.
Đối với mỗi trình duyệt, hành vi sẽ khác nhau. Nhưng bất kể, các phương pháp này phức tạp hơn so với nhấp vào nút. Nhấp chuột đang sử dụng những gì đã có (nhấp chuột của người dùng cuối), nhấp chuột js sẽ thông qua cửa hậu.
Và đối với nhấp chuột js sẽ xuất hiện là một nhiệm vụ không đồng bộ. Điều này có liên quan với một chủ đề phức tạp về ' tác vụ không đồng bộ của trình duyệt và lập lịch tác vụ CPU ' (đọc lại một lúc không thể tìm lại bài viết). Nói tóm lại, điều này chủ yếu sẽ dẫn đến việc nhấp chuột js sẽ cần chờ một chu kỳ lập lịch tác vụ của CPU và nó sẽ được chạy chậm hơn một chút sau khi ràng buộc sự kiện nhấp chuột.
(Bạn có thể biết trường hợp này khi bạn tìm thấy phần tử đôi khi có thể nhấp, đôi khi không.)
Khi chính xác điều này xảy ra và nhược điểm của cách giải quyết này (nếu có) là gì?
=> Như đã đề cập ở trên, cả hai đều có nghĩa cho một mục đích, nhưng về việc sử dụng lối vào nào:
- Bấm: đang sử dụng những gì cung cấp theo mặc định của trình duyệt.
- Nhấp chuột vào JS: đang đi qua cửa hậu.
=> Về hiệu suất, thật khó để nói vì nó phụ thuộc vào trình duyệt. Nhưng nói chung:
- Bấm: không có nghĩa là nhanh hơn mà chỉ ký vị trí cao hơn trong danh sách lịch biểu của tác vụ thực thi CPU.
- Nhấp chuột vào JS: không có nghĩa là chậm hơn mà chỉ có nó đăng nhập vào vị trí cuối cùng của danh sách lịch trình của tác vụ CPU.
=> Nhược điểm:
- Nhấp chuột: dường như không có bất kỳ nhược điểm nào ngoại trừ bạn đang sử dụng PhạmtomJS.
- Nhấp chuột vào JS: rất xấu cho sức khỏe. Bạn có thể vô tình nhấp vào cái gì đó không có trên màn hình. Khi bạn sử dụng phần này, hãy đảm bảo phần tử ở đó và có sẵn để xem và nhấp vào làm điểm nhìn của người dùng cuối.
PS nếu bạn đang tìm kiếm một giải pháp.
- Sử dụng PhantomJS? Tôi sẽ đề nghị sử dụng Chrome không đầu thay thế. Có, bạn có thể thiết lập Chrome không đầu trên Ubuntu. Điều này chạy giống như Chrome nhưng nó chỉ không có chế độ xem và ít lỗi hơn như PhantomJS.
- Không sử dụng PhạmtomJS nhưng vẫn gặp vấn đề? Tôi sẽ đề nghị sử dụng ExpectedCondition of Protractor với
browser.wait()
( kiểm tra điều này để biết thêm thông tin )
(Tôi muốn làm cho nó ngắn gọn, nhưng kết thúc tồi tệ. Mọi thứ liên quan đến lý thuyết đều phức tạp để giải thích ...)