Я предполагаю, что график событий выглядит так:
- на странице нет нужных элементов.
- необходимый элемент появляется, но отключен:
<input type="button" id="createFolderCreateBtn" disabled="disabled" />
- необходимый элемент становится активным:
<input type="button" id="createFolderCreateBtn" />
В настоящее время вы ищете элемент по идентификатору, и вы найдете его на шаге 2, что раньше, чем вам нужно. Что вам нужно сделать, это поиск по xpath:
//input[@id="createFolderCreateBtn" and not(@disabled)]
Вот разница:
from lxml import etree
html = """
<input type="button" id="createFolderCreateBtn" disabled="disabled" />
<input type="button" id="createFolderCreateBtn" />
"""
tree = etree.fromstring(html, parser=etree.HTMLParser())
tree.xpath('//input[@id="createFolderCreateBtn"]')
# returns both elements:
# [<Element input at 102a73680>, <Element input at 102a73578>]
tree.xpath('//input[@id="createFolderCreateBtn" and not(@disabled)]')
# returns single element:
# [<Element input at 102a73578>]
Чтобы подвести итог, вот ваш фиксированный код:
try:
print "about to look for element"
element_xpath = '//input[@id="createFolderCreateBtn" and not(@disabled)]'
element = WebDriverWait(driver, 10).until(
lambda driver : driver.find_element_by_xpath(element_xpath)
)
print "still looking?"
finally:
print 'yowp'
UPDATE:
Воспроизведение то же самое с реальным webdriver.
Вот код страницы example.html
:
<input type="button" id="createFolderCreateBtn" disabled="disabled" />
<input type="button" id="createFolderCreateBtn" />
Вот сеанс ipython:
In [1]: from selenium.webdriver import Firefox
In [2]: browser = Firefox()
In [3]: browser.get('file:///tmp/example.html')
In [4]: browser.find_elements_by_xpath('//input[@id="createFolderCreateBtn"]')
Out[4]:
[<selenium.webdriver.remote.webelement.WebElement at 0x103f75110>,
<selenium.webdriver.remote.webelement.WebElement at 0x103f75150>]
In [5]: browser.find_elements_by_xpath('//input[@id="createFolderCreateBtn" and not(@disabled)]')
Out[5]:
[<selenium.webdriver.remote.webelement.WebElement at 0x103f75290>]
ОБНОВЛЕНИЕ 2:
Это работает и с этим:
<input type="button" id="createFolderCreateBtn" disabled />