2015-01-23 20 views
8

Będę testować aplikację internetową. w moim stole dostępny jest przycisk do wyboru wszystkich wpisów. Próbowałem:Python selenu: poczekaj, aż element będzie klikalny - nie działa

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

selen kliknie na przycisk, ale nic się nie dzieje. (również z send_Keys (Keys.Return)) aplikacja jest opracowywana z GXT, co oznacza, że ​​za przyciskiem jest dużo javascriptu. Czy istnieje możliwość oczekiwania, aż program do ładowania zdarzeń będzie gotowy? czekanie przed kliknięciem rozwiązuje problem, ale nie jest rozwiązaniem do testów automatycznych.

+0

aby uzyskać szczegółową pomoc, musisz udostępnić kod lub adres URL. możesz to zrobić? –

Odpowiedz

18

Poprawna składnia wyraźnej czekać w Pythonie jest:

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

Lepiej, że po ponad zrobić: element.click();

Więc w twoim przypadku:

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

Lepiej przestrzegać go. Podziel się również swoim całym kodem, aby móc go poprawić. Twój jedyny 1-liniowy kod robi małe zamieszanie.

+0

Dziękuję za odpowiedź, ale próbowałem również na swój sposób. Przycisk nie zawsze był kliknięty przez selen. – Storm

+0

Proszę również udostępnić swój kod html. Czy przycisk włącza się od początku? –

1

Miałem też ten problem ... Aplikacje internetowe mają widoki na widoki, a Appium czasami się myli.

Ten pracował dla mnie:

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:

źle zrozumiałem pytanie ... Niestety ... Może modyfikowania XPath do: (nie wiem, czy to będzie działać w aplikacji internetowej)

xpath = "//whatever_goes_here[@clickable='true']" 
Powiązane problemy