Selenium 显式等待 invisibility_of_element() 根本不等待

Selenium Explicit Waits for invisibility_of_element() not waiting at all

我试图让 Selenium 等到加载程序 div 不可见。

这些是我的进口商品:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support.ui import expected_condition as EC

我首先单击一个按钮打开一个弹出窗口 window,其中包含 table 数据。

action.click()
action.perform()

单击后,我必须等到按下按钮才能将此数据导出到文件中。但是,我必须等待的时间千差万别。有时10秒有时几分钟。在加载此部分时,会出现一个加载器,这会阻止我单击屏幕上的任何位置。

我试图让 Selenium 等到这个加载程序消失。但是,出于某种原因,脚本根本不等待。甚至没有传递给显式等待函数的最长时间。

time.sleep(10)
print("Waiting for button")

wait = WebDriverWait(driver, 30) # I am just testing with 30, it will be a larger value
wait.until(EC.invisibility_of_element((By.XPATH, "//div[@class='loader']")))

print("Finished Waiting for button")

driver.find_element_by_xpath("//button[@class='export']").click()

首先,我让 Selenium 等待 10 秒,以便加载程序元素可以实际显示,它已经在 1-2 秒内显示。 之后,我使用 print 语句检查脚本实际等待了多长时间。 脚本根本不等待。它立即继续,然后导致错误,因为按钮还不可点击。

你传递的是 By.locator 所以你必须使用 [=27= 而不是 invisibility_of_element() ]invisibility_of_element_located().

首先等待元素的可见性,然后等待元素的不可见性

  • 先归纳WebDriverWait for the

  • 然后归纳 for the 如下:

    WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='loader']")))
    WebDriverWait(driver, 30).until(EC.invisibility_of_element_located((By.XPATH, "//div[@class='loader']")))
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC