我有这个selenium应用程序,它包含一个上传文件函数,在网站上每次上传后都会递归调用
问题:
正在快速调用该函数,而不是等待上传完成。这搞乱了整个申请流程。我知道我可以添加time.sleep()
但是我不知道文件的大小以及上传需要多长时间。所以我更喜欢添加一个检查以查看文件是否已上传
我的解决方案
幸运的是,上传完成后会弹出一条成功的消息
所以我决定添加等待成功消息的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("文件(一个或多个) 已成功上传!")))TypeError:' str'对象不是 调用
答案 0 :(得分: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")))