2015-09-30 4 views
2

У меня есть этот селен приложение, которое содержит функцию загрузки файла, который вызывается рекурсивно после каждой загрузки на веб-сайтеКак мы можем ждать текста сообщения выскакивают селеном

Проблема:

функция вызывается очень быстро, и она не ждет, когда загрузка будет выполнена. Что испортило весь процесс подачи заявки. Я знаю, что могу добавить time.sleep(), однако я не знаю размер файлов и продолжительность загрузки. Так что я предпочитаю, чтобы добавить проверку, чтобы увидеть, если файлы будут загружены

моего решения

К счастью для меня успешное сообщения появляется, когда закачка сделана

enter image description here

Так что я решил для добавления success_element, который ожидает, что сообщение об успешном завершении появится, как видно из кода ниже

def upload(driver, fileNum, filePath): 
     #click ok to upload 
     ok_link = driver.find_element_by_class_name("borderButton") 
     ok_link.click() 
     #wait for success message to pop out(FAILS) 
     success_wait = WebDriverWait(driver, 1200) 
     success_element = success_wait.until(EC.visibility_of_element_located(By.LINK_TEXT("File(s) have(s) been uploaded successfully!"))) 
     #call function again to upload more after succesful message pops out 
     upload(driver, fileNum, filePath) 

Ошибка:

Я получил эту ошибку ниже сразу после первой группы файлов будут загружены, так как он не нашел сообщение об успехе сразу, что он не должен так или иначе, и я подумал, что будет ждать он после загрузки выполняется в течение 1200 секунд (примерно 20 минут, что является максимальным)

Как решить эту проблему. Любые другие решения?

success_element = success_wait.until(EC.visibility_of_element_located(By.LINK_TEXT("File(s) have(s) been uploaded successfully!"))) TypeError: 'str' object is not callable

+0

вам нужно переключить с помощью driver.switch_to.window() для всплывающих – tinySandy

+1

Вероятно, не имеет отношения к вашему вопросу, но: Почему вы делаете рекурсивный вызов для загрузки? Не проще и легче создавать петлю? – BriceP

+0

@BigOldTree Я не понимаю, можете ли вы расширить? –

ответ

1

Для всех тех, кого была такая же проблема, я нашел решение, и оно использует EC.presence_of_element_located вместо этого. Что ждет элемент должен быть расположен или выдает ошибку после 20 минут

success_wait = WebDriverWait(driver, 1800) 
success_element = success_wait.until(EC.presence_of_element_located((By.ID, "successmessage")))