Skip to main content
 首页 » 编程设计

python之我们如何等待消息文本在 selenium 中弹出

2025年05月04日57cmt

我有一个包含上传文件功能的 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")))