2015-01-23 17 views
8

Ich werde eine Web-App testen. In meiner Tabelle steht eine Schaltfläche zur Auswahl aller Einträge zur Verfügung. Ich habe versucht:Python Selen: warte bis Element anklickbar ist - funktioniert nicht

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

Selen klickt auf den Button, aber nichts passiert. (auch mit send_Keys (Keys.Return)) wird die Anwendung mit GXT entwickelt, ich merke, dass hinter der Schaltfläche viel JavaScript steckt. Gibt es die Möglichkeit zu warten, bis ein Eventloader bereit ist? Warten vor einem Klick löst das Problem, aber keine Lösung für automatisiertes Testen.

+0

müssen Sie den Code oder die URL teilen, um gründliche Unterstützung zu erhalten. können Sie das tun? –

Antwort

18

korrekte Syntax für explizite Warte in Python ist:

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

Es wäre besser, nach oben Sie tun: element.click();

So in Ihrem Fall:

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

Besser Sie es folgen. Teilen Sie auch Ihren gesamten Code, damit ich ihn korrigieren kann. Dein nur 1 Zeilen Code macht wenig Verwirrung.

+0

Danke für die Antwort, aber ich habe es auch auf deine Art versucht. Der Knopf wurde nicht immer durch Selen angeklickt. – Storm

+0

Bitte teilen Sie Ihren HTML-Code auch. Wird die Schaltfläche von Anfang an aktiviert? –

1

Ich hatte auch dieses Problem ... Web-Apps haben Ansichten über Ansichten und Appium manchmal falsch.

Dieser arbeitete für mich:

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) 

bearbeiten:

ich Ihre Frage falsch verstanden ... Sorry ... Vielleicht auf Ihr XPath ändern: (weiß nicht, ob dies funktioniert in einer Web-App)

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