2017-09-28 1 views
1

J'ai cette fonction qui trouve un élément par le sélecteur css et attend qu'il cliquable:sélénium: attendre sur un WebElement

def wait_for_element_clickable(cls, selector, timeout=10, parent=None): 
    """ wait for an element to be clickable """ 
    if parent is None: 
     parent = cls.driver 
    wd_wait = WebDriverWait(parent, timeout) 

    # Wait for it to be visible too. 
    cls.wait_for_element(selector=selector, parent=parent) 

    wd_wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, selector)), 
        'waiting for element to be clickable ' + selector) 
    return parent.find_element_by_css_selector(selector) 

Maintenant, j'ai une situation où j'ai déjà un WebElement et je veux juste attendre qu'il soit cliquable. Existe-t-il un moyen d'utiliser EC.element_to_be_clickable sur un WebElement existant?

+0

Essayez avec Javascript attendez qu'il traitera ur problème – Gobi

Répondre

2

element_to_be_clickable n'a pas de surcharge pour WebElement en Python (bien qu'il ait Java et C#). Cependant, vous pouvez écrire votre propre

class element_to_be_clickable(object): 
    def __init__(self, element): 
     self.element = element 

    def __call__(self, driver): 
     return element.is_displayed() and element.is_enabled() 

Utilise

wd_wait.until(element_to_be_clickable(element)) 
+0

Il ressemble à un remplacement n'est pas équivalent element.is_displayed() et element.is_enabled() pour wd_wait.until (EC.element_to_be_clickable qui est aussi mentionné ici: https://stackoverflow.com/a/30830689/549226 – opike

+0

Je vois encore des erreurs "Element ... n'est pas cliquable au point ..." avec ce code . – opike