web-dev-qa-db-fra.com

Python Selenium: attendez que l'élément soit cliquable - ne fonctionne pas

Je vais tester une application web. il y a un bouton disponible dans ma table pour sélectionner toutes les entrées. J'ai essayé:

driver.wait.until(ExpectedCondition.element_to_be_clickable((By.XPATH, "myXpath"))).click()

Le sélénium clique sur le bouton, mais rien ne se passe. (également avec send_Keys (Keys.Return)) l'application est développée avec GXT, je pense qu'il y a beaucoup de javascript derrière le bouton. Est-il possible d'attendre qu'un chargeur d'événements soit prêt? attendre avant un clic résout le problème, mais pas une solution pour les tests automatisés.

23
Storm

Syntaxe correcte pour l'attente explicite dans python est:

 element = WebDriverWait(driver, 20).until(
 EC.presence_of_element_located((By.ID, "myElement")))

Mieux qu'après, vous faites: element.click ();

Donc dans votre cas:

from Selenium.webdriver.common.by import By
from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "myXpath")))

element.click();

Mieux vaut le suivre. Partagez également tout votre code afin que je puisse le corriger. Votre code d'une seule ligne fait peu de confusion.

50
Helping Hands

J'ai également eu ce problème ... Les applications Web ont des vues sur les vues et Appium se trompe parfois.

Cela a fonctionné pour moi:

x = webElement.location['x'] + (webElement.size['width']/2)
y = webElement.location['y'] + (webElement.size['height']/2)
print("x: "+x+" - y: "+y)

//I have setted a 200 milli duration for the click...
//I use tap just for Android... If is iOS for me it works better touchAction
driver.tap([(x,y)], 200)

Modifier :

J'ai mal compris votre question ... Désolé ... Peut-être modifier votre Xpath en: (je ne sais pas si cela fonctionnera dans une application web)

xpath = "//whatever_goes_here[@clickable='true']"
2
barbudito