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?!"
好吧,你可以看到,即使我将等待时间设置为0.1秒,仍然没有超时异常抛出。当执行element.click()
它不会阻止,直到整个页面加载,这就是为什么Just clicked! And I'm expecting timeout error!
出现,并且令我惊讶的是new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element"))
等到整个页面加载。如果你使用implicit waits
,你会得到相同的结果。告诉我为什么这不会以超时错误结束(selenium 2 webdriver)?
我的意思是,你点击一个元素有时后可能需要长达甚至几个小时的页面加载,因为一个坏的代理了,你显然不要要等那么久,你想要的是超时异常。在这种情况下,你如何使它工作?
我不完全明白你的意思。你能否更具体一些,我该怎么做? – Shane
...升级到2.22后,我意识到我无意中依赖这种隐含的等待的所有地方。 XD – Isaac
我不认为这是正确的。你正在讨论driver.set_page_load_timeout()我相信,但是这并不需要点击。并非所有的点击都会触发页面加载。页面加载超时仅用于页面加载。发问者在简单查找元素时也遇到了超时问题(不需要参与点击)。 – Purrell