2011-10-08 34 views
12

Tôi đang sử dụng cú pháp selenium WebDriver. Tôi biết, rằng trong cú pháp dựa trên máy chủ selen, bạn có thể bắn một sự kiện javascript bằng cách thực hiện:Làm thế nào để kích hoạt sự kiện JS trong selen?

Selenium selenium = new DefaultSelenium("localhost", server.getPort(), 
      "*iexplore", "http://www.eviltester.com"); 
selenium.fireEvent("lteq30", "blur"); 

làm thế nào để tôi làm như vậy trong một ứng dụng, tạo ra với WebDriver (ví dụ, FirefoxDriver)?

Trả lời

17

Đáng tiếc là các nhà thiết kế Selenium WebDriver rõ ràng decided not to include chức năng này trong Selenium 2.

Đó là một quyết định thận trọng để không bao gồm tính năng này trong WebDriver, vì nó thường là một hack để làm việc các sự kiện xung quanh tổng hợp không cư xử đúng cách . Chúng tôi muốn loại bỏ nhu cầu này bằng cách cung cấp hỗ trợ tuyệt vời cho các sự kiện gốc, vì vậy, chúng tôi sẽ tiếp tục cải thiện điều đó sẽ chuyển tiếp về phía trước. Người dùng sẽ không bao giờ kích hoạt sự kiện tiêu điểm, họ sẽ nhấp vào điều khiển biểu mẫu . Đó là những gì các xét nghiệm của bạn nên làm là tốt.

Với điều đó đã nói, bạn có thể thực thi bất kỳ mã javascript nào bạn muốn. Vì vậy, bạn nên xem xét cách kích hoạt sự kiện với javascript. Hãy xem this StackOverflow question để có cảm hứng.

Sau đó, bạn có thể làm một cái gì đó như thế này:

FirefoxDriver driver = new FirefoxDriver(); 
driver.ExecuteScript("[your fire event javascript code]"); 

tôi chắc chắn rằng bạn có thể tạo một hàm wrapper về cơ bản thực hiện được điều tương tự như fireEvent.

+0

sẽ chỉ đơn giản là chạy nhấp chuột() sự kiện trong JS thực hiện công việc hoặc làm tôi thực sự cần phải chạy chức năng cụ thể trong các mã? Nếu nó là thứ hai, điều đó có vẻ như một sự phụ thuộc xấu xí để đưa vào các bài kiểm tra. –

5

Một giải pháp:

((JavascriptExecutor) driver).executeScript("return document.getElementById('element').blur()"); 
+1

tại sao bạn có câu trả lời trong trường hợp này? nó sẽ không hoạt động nếu không có sự trở lại? –

+1

Câu lệnh trả về không cần thiết cho chức năng. Nhưng với câu lệnh trả về, bạn cũng nhận được phản hồi. –

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