Проблема, которую я обнаружил, заключается в том, что диалоговое окно загрузки зависает, пока веб-драйвер не будет закрыт.
Таким образом, element.click , который вызывает диалог загрузки, не возвращается, пока этот диалог загрузки не будет закрыт. Чтобы быть понятным, диалоговое окно загрузки означает выбор собственного файла ОС.
Вот мое решение (оно немного сложное, но * пожимает плечами * большинство способов обхода проблем с селеновым веб-драйвером должно быть сложным).
# presumes webdriver has loaded the web page of interest
element_input = webdriver.find_element_by_css_selector('input[id="uploadfile"]')
handle_dialog(element_input, "foobar.txt")
def handle_dialog(element_initiating_dialog, dialog_text_input):
def _handle_dialog(_element_initiating_dialog):
_element_initiating_dialog.click() # thread hangs here until upload dialog closes
t = threading.Thread(target=_handle_dialog, args=[element_initiating_dialog] )
t.start()
time.sleep(1) # poor thread synchronization, but good enough
upload_dialog = webdriver.switch_to_active_element()
upload_dialog.send_keys(dialog_text_input)
upload_dialog.send_keys(selenium.webdriver.common.keys.Keys.ENTER) # the ENTER key closes the upload dialog, other thread exits
Использование python 2.7, webdriver 2.25.0, в Ubuntu 12, с firefox.