等待上传完成或成功消息弹出

时间:2015-09-23 13:33:36

标签: python selenium

我有一个将多个文件上传到Web应用程序的selenium应用程序

在上传网页上,您最多可以选择4次上传,这意味着如果我上传8次,我必须重复此步骤两次才能在每个页面上传4次

我对selenium的问题是它不会减慢速度,这意味着它不会等待上传的前4个文件。它立即开始移动并上传其他4并崩溃网络小程序。

当我点击确定上传4个文件时,我收到了以下处理消息:

enter image description here

上传完成后,我收到了这条成功的消息:

enter image description here

我的python代码:

def upload(driver, fileNum, filePath):
      #if I have more than one file
      if fileNum > 1:     
            #while number of files is not 0 and files being uploaded on one page are 4
            while fileNum > 0 and i < 4:



                  #add file for every select button

                  select_link = driver.find_element_by_name('file_'+str(n))
                  select_link.send_keys(filePath[j])

                  i += 1
                  n += 1
                  j += 1
                  fileNum -= 1

            #check if after uploading the 4 files there are still more files to upload
            #if yes
            if fileNum > 0:
                  #if yes, click ok to upload the first four and call the function again
                  ok_link = driver.find_element_by_class_name("borderButton")
                  ok_link.click()

                  #recursive call
                  upload(driver, fileNum, filePath)
            else:
                  #just upload it without calling recursive function
                  ok_link = driver.find_element_by_class_name("borderButton")
                  ok_link.click()

正如您所看到的,当上传前4个并且还有更多文件时,我会递归调用函数upload(driver, fileNum, filePath)

有没有办法在调用递归函数之前等待前4个完成?要么等待成功的消息弹出,要么等待处理消息消失?

我该怎么做?

3 个答案:

答案 0 :(得分:1)

有两种方法可以等待特定的工作完成。

  1. 使用Explicit Waits,您可以在任何其他进程启动之前指定要存在的Web元素。这是最好的方式。
  2. 使用Implicit Waits
  3. 在这种情况下,请特别确保html元素包含

      

    文件已成功上传!

    已加载到网页中。

答案 1 :(得分:1)

Mahsum Akbas有部分答案。您可能希望等待Processing...弹出窗口显示然后消失。一种方法是

wait.until(EC.visibility_of_element_located((By.XX, "Processing... popup locator")))
wait.until(EC.invisibility_of_element_located((By.XX, "Processing... popup locator")))

答案 2 :(得分:0)

wait.until(EC.visibility_of_element_located((By.XX, "your progress bar selector")))