2014-06-05 22 views
9

Şu an için öneriler için ajax kullanan arama için webdriver testi yazıyorum. Arama içeriğini yazdıktan sonra ve enter tuşuna basmadan önce açık beklemeyi eklerseniz, sınama iyi çalışır.webdriver python'da ajax isteği için bekleyin

wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys("obama") 
time.sleep(2) 
wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys(Keys.RETURN) 

ama

wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys("obama") 
wd.find_element_by_xpath("//div[@class='searchbox']/input").send_keys(Keys.RETURN) 

başarısız olur. 1 sanal cpu ile ec2 testleri çalıştırıyorum. Şüpheleniyorum, arama ile ilgili GET istekleri gönderilmeden önce girdiğim ve öneriden önce enter tuşuna basarsam başarısız olur.

Açık beklemeler ekleyerek daha iyi bir yolu var mı?

cevap

11

Sen gerçekten

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 
from selenium.webdriver.support import expected_conditions as EC# available since 2.26.0 

ff = webdriver.Firefox() 
ff.get("http://somedomain/url_that_delays_loading") 
ff.find_element_by_xpath("//div[@class='searchbox']/input").send_keys("obama") 

try: 
    element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "keywordSuggestion"))) 
finally: 
    ff.find_element_by_xpath("//div[@class='searchbox']/input").send_keys(Keys.RETURN) 
    ff.quit() 

Bkz gibi bir elementin varlığı için açık bir bekleme ekleyebilirsiniz: http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits

-1

Peki ya: senin örneğin

driver.implicitly_wait(10) 

:

wd.implicitly_wait(10) 

Bu durumda, eleman sürücüsü tıklamak ya da bulmak için her seferinde bu eylemi her 10 saniyede bir 0,5 saniyede yapmaya çalışacaktır. Bu durumda, her seferinde bekleme eklemeniz gerekmez. Not: Ancak sadece ekrandaki eleman ile ilgili. Bazı JS eylemleri bitene kadar beklemez.