Python 告诉我为什么这不会导致超时错误(selenium 2 webdriver)?

Python 告诉我为什么这不会导致超时错误(selenium 2 webdriver)?,python,selenium,webdriver,selenium-webdriver,Python,Selenium,Webdriver,Selenium Webdriver,好的,您可以看到,即使我将等待时间设置为0.1秒,仍然没有引发超时异常。当执行element.click()时,它不会阻塞,直到整个页面加载完毕,这就是为什么刚才单击了!我期待超时错误出现了,令我惊讶的是new\u element=WebDriverWait(浏览器,0.1)。直到(lambda browser:browser.find\u element\u by\u id(“element”)等待整个页面加载完毕。如果使用隐式等待,则得到相同的结果 我的观点是,有时在您单击某个元素后,由于代

好的,您可以看到,即使我将等待时间设置为0.1秒,仍然没有引发超时异常。当执行
element.click()
时,它不会阻塞,直到整个页面加载完毕,这就是为什么刚才单击了
!我期待超时错误出现了,令我惊讶的是
new\u element=WebDriverWait(浏览器,0.1)。直到(lambda browser:browser.find\u element\u by\u id(“element”)
等待整个页面加载完毕。如果使用
隐式等待
,则得到相同的结果


我的观点是,有时在您单击某个元素后,由于代理错误,页面加载可能需要几个小时,而且您显然不想等待那么长时间,您需要的是超时异常。在这种情况下,您将如何使其工作

当页面加载时,单击会内置一个隐式等待。目前只有FirefoxDriver完成了一些工作,允许您设置Selenium等待页面加载的时间


这可能会出现在Selenium 2.22 for Python中,然后一旦设置了测试用例,您的测试用例可能会失败

webdriver wait上的Until方法会忽略元素not found异常以及在您指定的条件下在指定的时间段内发生的其他异常。在给定的时间之后,如果元素不存在,则最初会得到一个无此类元素异常,如果处理“无此类元素”异常,则会得到一个超时异常(最好是在try-catch中)

为了满足您的需要,您可以尝试采用这种方式-

->将焦点移到按钮上,然后加载页面 ->使用java代码触发单击(不是webdriver。因为单击将等待下一页加载。) ->放一根线,睡一会儿
->检查元素的预感知。

我不太明白你的意思。请你说得具体一点,我该怎么做?。。。升级到2.22后,我意识到所有我在不知不觉中依赖这种隐含等待的地方。我认为这是不对的。你说的是driver.set_page_load_timeout(),我相信这与点击无关。并非所有单击都会触发页面加载。页面加载超时仅用于页面加载。提问者在查找元素时也遇到了超时问题(不需要点击)。我完全理解你的工作,谢谢伙计!但是从我所看到的问题来看,浏览器也有点问题。通过id(“idstuff”)
查找元素,这意味着在页面完全加载之前,它实际上不会开始检查元素的存在,我不知道这种机制有什么意义,但这让我很烦,因为你无法控制。如果你还没有尝试过,你可以看看你是否在这里得到了这个链接的一些东西。(esp评论4听起来很有希望)。在一次随机搜索后找到的。没有花言巧语:)-
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?!"