我有一个包含上传文件功能的 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("File(s) have(s) been uploaded successfully!"))) TypeError: 'str' object is not callable
对于所有遇到同样问题的人,我找到了一个解决方案,它使用 EC.presence_of_element_located
代替。等待定位元素或在 20 分钟后抛出错误
success_wait = WebDriverWait(driver, 1800)
success_element = success_wait.until(EC.presence_of_element_located((By.ID, "successmessage")))
我是一名优秀的程序员,十分优秀!