Conditions prévues de sélénium - possible d'utiliser 'ou'?
Je suis en utilisant le Sélénium 2 /WebDriver avec l'API Python, comme suit:
from selenium.webdriver.support import expected_conditions as EC
# code that causes an ajax query to be run
WebDriverWait(driver, 10).until( EC.presence_of_element_located( \
(By.CSS_SELECTOR, "div.some_result")));
Je veux attendre pour soit un résultat retourné (div.some_result
) ou un "not found" de la chaîne. Est-ce possible? Genre:
WebDriverWait(driver, 10).until( \
EC.presence_of_element_located( \
(By.CSS_SELECTOR, "div.some_result")) \
or
EC.presence_of_element_located( \
(By.CSS_SELECTOR, "div.no_result")) \
);
Je me rends compte que je pouvais le faire avec un sélecteur CSS (div.no_result, div.some_result
), mais est-il un moyen de le faire en utilisant le Sélénium conditions prévues méthode?
source d'informationauteur artfulrobot
Vous devez vous connecter pour publier un commentaire.
J'ai fait comme ceci:
Puis l'appeler comme...
Évidemment, il serait trivial de mettre également en œuvre un
AllEc
classe de la même manière.Nb. le
try:
bloc est impair. J'étais confus parce que certains ECs retourner true/false tandis que d'autres vont lancer des exceptions pour de Faux. Les Exceptions sont capturés par des WebDriverWait donc mon AnyEc chose a été de produire des résultats bizarres parce que le premier à lancer une exception signifiait AnyEc ne pas procéder à l'essai suivant.Question très ancienne, mais,
Examiner comment
WedDriverWait
travaux, dans un exemple indépendants de sélénium:Cela permettra d'attendre jusqu'à 5 secondes pour
is_even(x)
de retourTrue
maintenant,
WebDriverWait(7, 5).until(is_even)
prendra 5 secondes et de lever un TimeoutExceptionS'avère, vous pouvez retourner n'importe quel non Falsy valeur et le capturer:
Maintenant examiner la manière dont les méthodes de
EC
travaux:Probablement, vous voulez essayer quelque chose comme:
cela fonctionnerait si
EC.presence_of_element_located
retournéFalse
quandselector
pas trouvé dansparent
mais il soulève une exception, une facile-à-comprendre la solution de contournement serait:Mon but était d'expliquer, artfulrobot déjà donné un extrait de code pour un usage général de réels
EC
méthodes, il suffit de noter queEst juste un moyen plus souple de définir des fonctions (en fait, une "fonction", mais c'est sans importance dans ce contexte)
Essayez d'utiliser l'expression lambda:
WebDriverWait(driver, 10).until(lambda a:
a.presence_of_element_located(By.CSS_SELECTOR, "div.some_result") OR
a.presence_of_element_located(By.CSS_SELECTOR, "div.no_result"))