2012-05-25 7 views
7
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 

browser = webdriver.Firefox() 

browser.get("http://testsite.com") 

element = WebDriverWait(browser, 10).until(lambda browser : browser.find_element_by_id("element")) 

element.click() # it actually goes to page http://testsite.com/test-page.html 

print "Just clicked! And I'm expecting timeout error!" 

new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element")) 

print "Too bad there's no timeout error, why?!" 

Tamam, atılan hiçbir zaman aşımı istisna hala var 0.1 sn bekleme süresi ayarlanır. element.click() yukarı tüm sayfayı yükler kadar engellemez yürütülen ve Just clicked! And I'm expecting timeout error! gösterdi, bu yüzden ve yukarı tüm sayfayı yükler kadar benim sürpriz new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element")) bekleme ne zaman. Ve implicit waits kullanırsanız, aynı sonucu alırsınız.Bunun neden bir zaman aşımı hatasıyla sonuçlanmadığını söyle (selenium 2 webdriver)? Hatta gördüğünüz gibi

Demek istediğim bir öğeyi tıklayın bazen sonra ise istediğini, bunun nedeni kötü proxy kadar yük bir sayfa için bile saatler sürebilir ve sen çok uzun beklemek istiyorum YAPMAYIN olduğu bir zaman aşımı istisnası. Bu durumda nasıl çalışırsın?

cevap

4

Tıklanma sayfa yüklendiğinde beklemek bunlara yerleşik örtük bekleyeceksin. Şu anda sadece FirefoxDriver'da tamamlanmış bir iş var, bu da Selenium'un bir sayfanın yüklenmesini beklemesi gereken süreyi ayarlamanıza izin veriyor.

Bu muhtemelen Python için selenyum 2.22 olacak ve sonra test durumu olasılıkla o ayarlandıktan sonra başarısız olur

+0

Oldukça ne demek istediğini alamadım. Lütfen daha spesifik olursunuz ve bunu nasıl yapabilirim? – Shane

+0

... ve 2.22'ye yükseldikten sonra, bu gizli beklemeye bilmeden güvendiğim tüm yerleri anladım. XD – Isaac

+0

Bunun çok doğru olduğunu düşünmüyorum. Driver.set_page_load_timeout() hakkında konuşuyorsunuz, ancak bunun tıklamalarla ilgisi yok. Tüm tıklamalar sayfa yükünü tetiklemez. Sayfa yükleme süresi sadece sayfa yükleme içindir. Ayrıca soru soran, öğeyi bulmakla ilgili zaman aşımıyla ilgili sorun yaşamaktadır (tıklamalara gerek yoktur). – Purrell

0

webdriver bekleyin üzerinde yöntem durumda occures eleman bulunmayan istisna ve diğer özel durumları göz ardı zamana kadar belirttiğiniz süre için belirtin. Belirli bir süreden sonra, eğer öğeye sahip değilseniz ve ardından 'böyle bir öğe yok' istisnası (tercihen bir try catch'unda) ele alırsanız zaman aşımı istisnası yoksa başlangıçta böyle bir eleman istisnası olmaz. Bu etrafında bir çalışmayı deneyebilirsiniz İhtiyacınıza için

yol--> Bir sayfa yükleme yoktur bundan sonra düğmesine odağı getir -> değil webdriver tıklama beri java kodu ile tıklama (ateşleyin. bir sonraki sayfanın yüklenmesi için bekleyecektir) -.> bir saniye için Thread.Sleep koyun ya da iki -> öğenin prescense kontrol edin.

+0

python ile nasıl çalıştığından emin değil. ama bu nasıl java gider .. – QVSJ

+0

Tamamen işinizi anlıyorum, teşekkürler dostum! Ama problemi görebildiğim kadarıyla, browser.find_element_by_id ("idstuff") 'ile de yaşıyor, yani bu sayfa tam olarak yükleninceye kadar o elementin varlığını kontrol etmeye başlamıyor, ne anlama geldiğini bilmiyorum Bu mekanizma içinde, ama bu sizin üzerinde hiçbir kontrolünüz olmadığı için beni çok rahatsız ediyor. Zaten bu denemediyseniz – Shane

+0

buradan bir şey elde varsa, (özellikle 4 umut verici geliyordu açıklama). görebiliyordu bu bağlantı http://code.google.com/p/selenium/issues/detail?id=687 arasında . Rastgele bir aramadan sonra geldi. Yorum yok :) - – QVSJ