2012-07-18 13 views
10

दिखाई देने की प्रतीक्षा वहाँ एक रास्ता एक webDriverWait तत्वों की एक संख्या प्रकट करने के लिए और तदनुसार पर तत्व दिखाई देता है जो आधारित कार्य करने के लिए में से एक के लिए प्रतीक्षा करने के लिए है?webdriver एक बहु तत्वों में से एक

इस समय मैं एक कोशिश लूप के भीतर WebDriverWait करता हूं और यदि टाइमआउट अपवाद होता है तो मैं वैकल्पिक कोड चलाता हूं जो अन्य तत्व को प्रकट होने की प्रतीक्षा करता है। यह बेकार लगता है। क्या कोई बेहतर तरीका है? यहाँ मेरी (अनाड़ी) कोड है:

try: 
    self.waitForElement("//a[contains(text(), '%s')]" % mime) 
    do stuff .... 
except TimeoutException: 
    self.waitForElement("//li[contains(text(), 'That file already exists')]") 
    do other stuff ... 

यह एक संपूर्ण 10 सेकंड इंतजार कर शामिल होने से पहले ही संदेश है कि फाइल सिस्टम पर पहले से मौजूद है, तो देखने के लिए लग रहा है।

समारोह waitForElement सिर्फ WebDriverWait कॉल तो तरह की एक संख्या है:

def waitForElement(self, xPathLocator, untilElementAppears=True): 
    self.log.debug("Waiting for element located by:\n%s\nwhen untilElementAppears is set to %s" % (xPathLocator,untilElementAppears)) 
    if untilElementAppears: 
     if xPathLocator.startswith("//title"): 
      WebDriverWait(self.driver, 10).until(lambda driver : self.driver.find_element_by_xpath(xPathLocator)) 
     else: 
      WebDriverWait(self.driver, 10).until(lambda driver : self.driver.find_element_by_xpath(xPathLocator).is_displayed()) 
    else: 
     WebDriverWait(self.driver, 10).until(lambda driver : len(self.driver.find_elements_by_xpath(xPathLocator))==0) 

किसी भी सुझाव यह एक अधिक कुशल तरीके से पूरा करने के लिए मिल गया?

उत्तर

7

एक समारोह है कि प्रश्नों XPath के पहचानकर्ता का एक नक्शा ले जाता है और पहचानकर्ता कि मिलान किया गया था रिटर्न बनाएँ।

def wait_for_one(self, elements): 
    self.waitForElement("|".join(elements.values()) 
    for (key, value) in elements.iteritems(): 
     try: 
      self.driver.find_element_by_xpath(value) 
     except NoSuchElementException: 
      pass 
     else: 
      return key 

def othermethod(self): 

    found = self.wait_for_one({ 
     "mime": "//a[contains(text(), '%s')]", 
     "exists_error": "//li[contains(text(), 'That file already exists')]" 
    }) 

    if found == 'mime': 
     do stuff ... 
    elif found == 'exists_error': 
     do other stuff ... 
+0

धन्यवाद चलाने के लिए है। वह काम करेगा। – amadain

1

कुछ इस तरह:

def wait_for_one(self, xpath0, xpath1): 
    self.waitForElement("%s|%s" % (xpath0, xpath1)) 
    return int(self.selenium.is_element_present(xpath1)) 
+0

is_element_present एक सेलेनियम आरसी विधि है। यहां मुख्य बात यह पहचानना है कि किस 'या कथन' पथ को लिया गया था ताकि लौटाया गया मूल्य बता सके कि कौन सा कोड – amadain

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