2011-10-24 25 views
9

Gần đây, chúng tôi đã bắt đầu thử nghiệm ứng dụng dựa trên Django của chúng tôi bằng Selenium. Các thử nghiệm chạy tốt trên Linux, nhưng một số lỗi trên Mac OS X. Chúng tôi đang sử dụng Firefox làm trình duyệt trong cả hai trường hợp và mất một thời gian (và một số may mắn) để tìm ra sự khác biệt quan trọng giữa hai trường hợp FF đang chạy dưới dạng ứng dụng nền trước hoặc dưới dạng cửa sổ nền. Dưới đây là những gì xảy ra trên Linux:Cách buộc Firefox trở thành ứng dụng nền trước khi thử nghiệm với Selenium trên Mac OS X

  1. Selenium yêu cầu Firefox truy cập trang đăng ký người dùng.
  2. Selen sẽ điền vào tên người dùng và địa chỉ email không hợp lệ.
  3. Thay đổi selen tập trung từ trường địa chỉ email sang trường khác trên cùng một trang (trường hợp này là hộp tìm kiếm, nhưng điều đó không quan trọng --- tất cả những gì quan trọng là sự kiện thay đổi tiêu điểm).
  4. Mã xác thực Javascript trong trang web thông báo rằng địa chỉ email không hợp lệ và chèn thông báo lỗi vào trang.
  5. Selen phát hiện thông báo lỗi đó và đánh dấu thử nghiệm là đã qua.

Khi chúng tôi chạy trên Mac OS X, tuy nhiên, bướC# 4 không xảy ra trừ khi chúng bằng tay foreground cửa sổ Firefox trong khi thử nghiệm đang chạy --- nếu chúng ta để nó ở chế độ nền (đó là theo mặc định), Javascript trong trình duyệt không nhận được sự kiện thay đổi tập trung, do đó thông báo lỗi sẽ không bao giờ được chèn vào DOM của trang, vì vậy, thời gian Selenium chờ đợi và thử nghiệm không thành công.

Chúng tôi có thể buộc Selenium đặt nền trước trình duyệt khi chạy thử nghiệm để Javascript của chúng tôi có được sự kiện như chúng tôi muốn không? Nếu vậy, làm thế nào?

+1

Bạn có thể đăng mã chính xác bạn đang sử dụng không? – Amey

Trả lời

2

Selen sẽ thúc đẩy trình duyệt thông qua Javascript. Không có cách nào để kiểm soát cửa sổ trình duyệt thông qua JS. Nói chung, việc thử nghiệm các sự kiện 'onfocus' và 'onblur' trong Selenium là rất khó.

Bạn có thể tự mình thử sự kiện này bằng cách thực hiện đánh giá JS bằng cách sử dụng phương thức 'runScript' hoặc 'getEval' của Selenium sau khi nhập địa chỉ email không hợp lệ. Đây không phải là thử nghiệm hộp đen "thuần khiết" tức là kiểm tra của bạn cần phải được thay đổi nếu việc thực hiện xác thực được thay đổi, nhưng đây là cách khả thi nhất để thực hiện thử nghiệm này.

+1

Vâng, không có cách nào để làm điều đó từ JavaScript hoặc Java. Cả hai đều quá nặng nề. Bạn sẽ phải viết một ứng dụng gốc trong ObjectiveC hoặc C++ để thao tác lấy nét và gọi nó từ JVM khi bạn khởi chạy Selenium. Thậm chí điều đó có thể không hoạt động tốt kể từ khi người quản lý cửa sổ thường xuyên (chính xác) không cho phép bạn muck xung quanh với trọng tâm vì nó được cho là tùy thuộc vào người dùng. Như Pavan nói có lẽ cách đáng tin cậy duy nhất để làm điều đó là kích hoạt sự kiện lấy nét theo cách thủ công. –

Các vấn đề liên quan