2012-07-18 16 views
10

webDriverWait görüntülenmesi için bir dizi öğenin görüntülenmesini beklemek ve hangi öğenin göründüğüne bağlı olarak hareket etmek için bir yol var mı?webdriver Birden fazla öğeden birinin görünmesi için bekle

Şu anda bir deneme döngüsü içinde WebDriverWait yapıyorum ve zaman aşımı istisnası oluşursa, diğer öğenin görünmesini bekleyen alternatif kodu çalıştırıyorum. Bu beceriksiz görünüyor. Daha iyi bir yolu var mı? İşte benim (beceriksiz) kodu şudur: dosya sistemde zaten var mesajı olmadığını görmek için bakar önce Tamamında 10 saniye beklemeyi gerektirir

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

.

fonksiyon waitForElement sadece bu yüzden gibi WebDriverWait aramaların sayısı kapsamaz:

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) 

Herkes herhangi bir öneri daha verimli bir şekilde bunu gerçekleştirmek için var? Böyle

cevap

7

sorguları XPath için tanımlayıcıları bir harita alır ve eşleştirilen tanımlayıcı döndüren bir işlev oluşturun.

+0

'un hangi kodu çalıştıracağını size söyleyebilir. Bu işe yarayacak. – amadain

1

şey:

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 bir selenium rc yöntemidir. Burada asıl olan, 'veya' ifadesi 'yollarının hangisinin alındığını tanımlamaktır, böylece döndürülen değer, – amadain