2010-09-12 11 views
8

के लिए पाइथन बाइंडिंग में समतुल्य समकक्ष मैं सेलेनियम से वेबड्राइवर तक कुछ परीक्षण चला रहा हूं। मेरी समस्या यह है कि मुझे selenium.wait_for_condition के बराबर नहीं मिल रहा है। क्या पाइथन बाइंडिंग इस समय है, या फिर भी यह योजना बनाई गई है?selenium.wait_for_condition वेबड्राइवर

उत्तर

9

वर्तमान में WebDriver के साथ wait_for_condition का उपयोग करना संभव नहीं है। पाइथन सेलेनियम कोड पुरानी सेलेनियम विधियों तक पहुंचने के लिए ड्राइववेसेनियम कक्षा प्रदान करता है, लेकिन यह wait_for_condition नहीं कर सकता है। The selenium wiki has some info on that

आपकी सर्वश्रेष्ठ शर्त WebDriverWait क्लास का उपयोग करना है। यह एक सहायक वर्ग है जो समय-समय पर कार्य को निष्पादित करता है ताकि वह सही लौट सके। मेरे सामान्य उपयोग यह समाधान कोई आदर्श तरह से है

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 

है .. ट्राई/छोड़कर स्थितियों में, जहां पेज अनुरोध/प्रतिक्रिया चक्र कुछ ajax गतिविधि को पूरा करने के लिए इंतज़ार कर देरी हो रही है के लिए आवश्यक है। अगर तुलना/प्रतिक्रिया चक्र के बीच तुलना_सोर्स को बुलाया जाता है तो यह एक वेबड्राइवर अपवाद फेंक देगा।

test coverage for WebDriverWait भी देखने में मददगार है।

+0

ऐसा लगता है जैसे आप दृश्यता का परीक्षण कर सकते हैं। 'selenium.webdriver.support से अपेक्षित_conditions आयात करें' और फिर 'ec.visibility_of (elm)'। इसका रिटर्न ऑब्जेक्ट 'selenium.webdriver.support.expected_conditions.visibility_of' है, लेकिन मुझे यह पता नहीं लगा है कि इसकी दृश्यता कैसे प्राप्त करें। – huggie

0

जावा बाइंडिंग में प्रतीक्षा कक्षा शामिल है। यह कक्षा समय-समय पर पहुंचने तक एक शर्त (बीच में सोती है) के लिए बार-बार जांचती है। यदि आप सामान्य एपीआई का उपयोग करके अपने जावास्क्रिप्ट को पूरा करने का पता लगा सकते हैं, तो आप एक ही दृष्टिकोण ले सकते हैं।

2

यहाँ ग्रेग Sadetsky के जवाब के अपने संस्करण, एक समारोह में डाल दिया है:

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) 

यह बटन क्लिक करता है, डोम बदलने के लिए इंतजार कर रहा है और उसके बाद वापस आती है।

संबंधित मुद्दे