Pelon selenium: подождите, пока элемент не будет доступен для клика - не работает

Я буду тестировать веб-приложение. в моей таблице есть кнопка, чтобы выбрать все записи. Я пробовал:

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

selenium нажимает кнопку, но ничего не происходит. (также с send_Keys (Keys.Return)) приложение разработано с помощью GXT, я считаю, что за кнопкой много javascript. Есть ли возможность подождать, пока не будет создан eventloader? ожидание перед щелчком решает проблему, но не решение для автоматического тестирования.

Ответ 1

Правильный синтаксис для явного ожидания в Python:

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

Лучше, чем после вы делаете: element.click();

Итак, в вашем случае:

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();

Лучше следуй этому. Также поделитесь всем своим кодом, чтобы я мог его исправить. Ваш только 1-строчный код немного сбивает с толку.

Ответ 2

У меня была и эта проблема... У веб-приложений есть представления по просмотрам, и Appium иногда ошибается.

Это сработало для меня:

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)

Edit

Я неправильно понял ваш вопрос... Извините... Возможно, вы изменили свой Xpath: (не знаю, будет ли это работать в веб-приложении)

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