WebDriver Wait无法正常工作

时间:2015-07-30 07:42:16

标签: python html selenium selenium-webdriver webdriver

我试着不要等到整个页面加载完毕。就我而言WebDriverWait应该提供帮助,所以我尝试将它放入我的代码中,但有些东西我不知道,因为它引发TimeoutException虽然我可以看到标签

self.driver.get('http://www.quoka.de/')
self.wait.until(EC.invisibility_of_element_located((By.ID, 'search1')))
self.driver.find_element_by_id("search1").send_keys('nachhilfe')
self.driver.find_element_by_id('searchbutton').click()

所以它打开Firefox,然后等到页面加载。这是我正在寻找的标签:

<input id="search1" name="search1" class="form-control" placeholder="Was suchst du?" value="" type="text">

Firefox已经加载了此标记,但它仍然等待整个页面。你有什么建议吗?

编辑:就我而言,这一行self.wait.until(EC.invisibility_of_element_located((By.ID, 'search1')))应该让Firefox等到标签可见,并且在加载这个标签之后它应该继续使用另一行代码。

1 个答案:

答案 0 :(得分:0)

试试这个:

self.driver.get('http://www.quoka.de/')
self.wait.until(EC.presence_of_element_located((By.ID, 'search1')))
self.driver.find_element_by_id("search1").send_keys('nachhilfe')
self.driver.find_element_by_id('searchbutton').click()

invisibility_of_element_located在DOM中等待元素不可见不存在! 据我了解你的问题,你想要完全相反。所以请尝试使用presence_of_element_located。

请注意find_element_by_id也需要一些时间。因此,只要元素对用户可见,就不会立即成为send_keys。

衡量这段时间你可以尝试一下:

import time

start = time.time()

self.driver.get('http://www.quoka.de/')
self.wait.until(EC.presence_of_element_located((By.ID, 'search1')))

end = time.time()

print end-start

start = time.time()

element = self.driver.find_element_by_id("search1")

end = time.time()

print end-start

element.send_keys('nachhilfe')
self.driver.find_element_by_id('searchbutton').click()