我们如何等待在selenium

时间:2015-09-30 18:15:06

标签: python python-2.7 selenium selenium-webdriver

我有这个selenium应用程序,它包含一个上传文件函数,在网站上每次上传后都会递归调用

问题:

正在快速调用该函数,而不是等待上传完成。这搞乱了整个申请流程。我知道我可以添加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("文件(一个或多个)   已成功上传!")))TypeError:' str'对象不是   调用

1 个答案:

答案 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")))