2010-09-12 19 views
8

Bazı testleri Selenium'dan WebDriver'a taşıyorum. Benim sorunum selenium.wait_for_condition için bir eşdeğer bulamıyorum. Python bağlamaları şu anda var mı, yoksa hala planlanıyor mu?selenium.wait_for_condition eşdeğeri

cevap

9

Şu anda WebDriver ile wait_for_condition kullanmak mümkün değil. Python selenium kodu, eski selenyum yöntemlerine erişmek için DrivenSelenium sınıfı sağlar, ancak wait_for_condition yapamaz. The selenium wiki has some info on that.

En iyi seçiminiz WebDriverWait sınıfını kullanmaktır. Bu, periyodik olarak True değerini döndürmesini bekleyen bir işlevi yürüten yardımcı bir sınıftır. Benim genel kullanım ideal olduğu hiçbir Bu çözümdür

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 

olduğunu .. deneme/sayfa istek/yanıt döngüsü bazı ajax etkinlik tamamlamak için bekleyen gecikir durumlar için gereklidir hariç. Compare_source'ın istek/yanıt döngüsünün ortasında çağrılması durumunda, bir WebDriverException atar.

test coverage for WebDriverWait da bakmak için yararlıdır. döner, sonra

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) 

O düğmesini tıkladığında değiştirmek için DOM bekler ve:

+0

Görünürlüğü test edebilirsiniz gibi görünüyor. selenium.webdriver.support dosyasından, import_conditions öğesini ec 0 ve sonra ec ec.visibility_of (elm) 'olarak aktarın. Bunun geri dönüş nesnesi "selenium.webdriver.support.expected_conditions.visibility_of" şeklindedir, ancak bunun görünürlüğünü nasıl alacağımı anlayamadım. – huggie

0

Java ciltleme bir Bekleme sınıfı içerir. Bu sınıf, bir zaman aşımına ulaşılana kadar bir koşulu (bir arada uyur) tekrar tekrar kontrol eder. Normal API'yi kullanarak Javascript'inizin tamamlandığını tespit ederseniz, aynı yaklaşımı uygulayabilirsiniz.

2

İşte bir fonksiyonu koymak Greg Sadetsky cevabı benim sürümü, bu.