2010-09-12 11 views

Trả lời

9

Hiện tại, bạn không thể sử dụng wait_for_condition với WebDriver. Mã selenium python không cung cấp lớp DrivenSelenium để truy cập các phương thức selen cũ, nhưng nó không thể thực hiện wait_for_condition. The selenium wiki has some info on that.

Đặt cược tốt nhất của bạn là sử dụng lớp WebDriverWait. Đây là một lớp helper định kỳ thực thi một hàm đợi nó trả về True. sử dụng chung của tôi là

driver = webdriver.Firefox() 
driver.get('http://example.com') 
add = driver.find_element_by_id("ajax_button") 
add.click() 
source = driver.page_source 

def compare_source(driver): 
    try: 
     return source != driver.page_source 
    except WebDriverException: 
     pass 

WebDriverWait(driver, 5).until(compare_source) 
# and now do some assertions 

Giải pháp này là không phải là lý tưởng .. Các thử/trừ là cần thiết cho tình huống mà chu kỳ yêu cầu trang/đáp ứng được trì hoãn chờ đợi đối với một số hoạt động ajax để hoàn thành. Nếu compare_source nhận được gọi là ở giữa chu kỳ yêu cầu/đáp ứng nó sẽ ném một WebDriverException.

test coverage for WebDriverWait cũng hữu ích khi xem xét.

+0

Dường như bạn có thể kiểm tra độ nhớt. 'từ selenium.webdriver.support nhập expect_conditions là ec' và sau đó là' ec.visibility_of (elm) '. Đối tượng trả về của nó là 'selenium.webdriver.support.expected_conditions.visibility_of' nhưng tôi không tìm ra cách để hiển thị nó. – huggie

0

Ràng buộc Java bao gồm lớp Chờ. Lớp này liên tục kiểm tra tình trạng (với giấc ngủ giữa) cho đến khi hết thời gian chờ. Nếu bạn có thể phát hiện việc hoàn thành Javascript của mình bằng cách sử dụng API thông thường, bạn có thể thực hiện cùng một cách tiếp cận.

2

Dưới đây là phiên bản của tôi về câu trả lời của Greg Sadetsky của, đưa vào một hàm:

def click_n_wait(driver, button, timeout=5): 
    source = driver.page_source 
    button.click() 
    def compare_source(driver): 
     try: 
      return source != driver.page_source 
     except WebDriverException: 
      pass 
    WebDriverWait(driver, timeout).until(compare_source) 

Nó nhấp chuột vào nút, đợi cho DOM để thay đổi và sau đó trả về.