2013-03-30 27 views
7

Để chạy các thử nghiệm chức năng của tôi, tôi sử dụng LiveServerTestCase.Python django: Cách gọi selenium.set_speed() với django LiveServerTestCase

Tôi muốn gọi set_speed (và các phương pháp khác, set_speed chỉ là một ví dụ) không có trong trình quản lý web, nhưng nằm trong đối tượng selen.

http://selenium.googlecode.com/git/docs/api/py/selenium/selenium.selenium.html#module-selenium.selenium

lớp con của tôi về LiveServerTestCase

from selenium import webdriver 

class SeleniumLiveServerTestCase(LiveServerTestCase): 

    @classmethod 
    def setUpClass(cls): 

     cls.driver = webdriver.Firefox() 
     cls.driver.implicitly_wait(7) 

     cls.driver.maximize_window() 

     # how to call selenium.selenium.set_speed() from here? how to get the ref to the selenium object? 

     super(SeleniumLiveServerTestCase, cls).setUpClass() 

Làm thế nào để có được điều đó? Tôi không thể gọi nhà xây dựng trên selenium, tôi nghĩ vậy.

+2

kiểm tra [this] (http: //stackoverflow.c liên kết om/questions/9910900/implementation-webdriverbackedselenium-in-python). Bạn có thể cần phải sử dụng selenium được hỗ trợ Webdo để sử dụng phương thức setspeed. – Hemanth

Trả lời

7

Bạn không. Thiết lập tốc độ trong WebDriver là không thể và lý do cho điều này là bạn thường không cần phải, và 'chờ đợi' bây giờ được thực hiện ở một mức độ khác nhau.

Trước khi có thể nói với Selenium, đừng chạy ở tốc độ bình thường, chạy ở tốc độ chậm hơn để cho phép tải nhiều trang hơn, tải trang chậm hoặc trang AJAX'ified.

Bây giờ, bạn hoàn toàn đồng ý với điều đó. Ví dụ:

Tôi có trang đăng nhập, tôi đăng nhập và sau khi đăng nhập, tôi thấy thông báo "Chào mừng". Vấn đề là thông điệp chào mừng không được hiển thị ngay lập tức và có thời gian trễ (sử dụng jQuery).

Pre WebDriver Mã sẽ ra lệnh để Selenium, chạy thử nghiệm này, nhưng làm chậm đây vì vậy chúng tôi có thể chờ cho đến khi thông điệp Welcome xuất hiện.

Mới hơn đang WebDriver sẽ ra lệnh để Selenium, chạy thử nghiệm này, nhưng khi chúng ta đăng nhập, chờ lên đến 20 giây cho tin nhắn Chào mừng bạn đến xuất hiện, sử dụng explicit waits.

Bây giờ, nếu bạn thực sự muốn truy cập vào " đặt "tốc độ của Selenium, trước tiên tôi khuyên bạn nên chống lại nó, nhưng giải pháp sẽ là đi sâu vào mã cũ hơn, không còn được dùng nữa.

Nếu bạn sử dụng WebDriver nhiều, bạn có thể sử dụng WebDriverBackedSelenium có thể cung cấp cho bạn quyền truy cập vào các phương pháp cũ hơn của Selenium, trong khi vẫn giữ được WebDriver sao lưu giống nhau, do đó nhiều mã của bạn sẽ giữ nguyên.

https://groups.google.com/forum/#!topic/selenium-users/6E53jIIT0TE

tùy chọn thứ hai là để bổ nhào vào mã Selenium cũ và sử dụng nó, điều này sẽ thay đổi rất nhiều mã hiện tại của bạn (vì nó là trước khi "WebDriver" khái niệm được sinh ra).

Mã cho cả Selenium RC & WebDriverBackedSelenium sống ở đây, cho tò mò:

https://code.google.com/p/selenium/source/browse/py/selenium/selenium.py

cái gì đó dọc theo dòng:

from selenium import webdriver 
from selenium import selenium 
driver = webdriver.Firefox() 
sel = selenium('localhost', 4444, '*webdriver', 'http://www.google.com') 
sel.start(driver = driver) 

Sau đó bạn sẽ nhận được quyền truy cập để làm điều này :

sel.setSpeed(5000) 
+0

càng sớm càng tốt, tôi sẽ thử các tùy chọn backendselenium. Imho không thể tin được rằng người ta không thể làm chậm toàn bộ dòng selen trong mã trình quản trị web mới hơn – apelliciari

+0

, điều đó không thể tin được chút nào, bạn không cần phải giảm tốc độ của nhiệm vụ kiểm tra/tự động hóa. Nếu nó không hoạt động vì thử nghiệm sẽ diễn ra quá nhanh, điều đó có nghĩa là thử nghiệm được viết kém và nên sử dụng các lần chờ rõ ràng. Có thể thiết lập một sự chờ đợi tiềm ẩn trên đối tượng webdriver, nhưng điều này sẽ không bao giờ được sử dụng vì nó có thể có các tác dụng phụ không mong muốn, đặc biệt nếu được sử dụng kết hợp với việc chờ đợi rõ ràng. – Ardesco

+0

lý do duy nhất tại sao tôi muốn giảm tốc độ là kiểm tra quá trình khi kiểm tra thất bại. nếu tôi làm chậm bài kiểm tra, tôi có thể thấy điều gì xảy ra – apelliciari