为什么Selenium的等待时间太长,加载程序才会消失?

2024-09-28 03:15:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在等待元素不可见时,哪个selenium.webdriver.support.expected_conditions更适合使用? 在我的例子中,我将数据输入表单,单击save并等待加载程序消失

from selenium.webdriver.support import expected_conditions as EC 
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((SelectBy.CSS_SELECTOR, ".spinner")))
debug("loader appeared")
wait.until(EC.invisibility_of_element_located((SelectBy.CSS_SELECTOR, ".spinner")))
debug("loader disappeared")

在输出中,我看到第二次等待执行了20秒(我的全局隐式等待是20秒)

360ms ⟥     [debug] loader appeared
21s 141ms ⟥ [debug] loader disappeared

定位器很好,我正在努力了解等待有什么问题。 有没有人有类似的问题?我很乐意接受任何建议


Tags: ofdebugsupportseleniumelementloadercssconditions
2条回答

您的等待操作彼此堆叠,因为您的代码被链接

让我用你的代码解释一下:

# 1. create a wait object
wait = WebDriverWait(driver, 10)

# 2. execute a wait statement
wait.until(EC.presence_of_element_located((SelectBy.CSS_SELECTOR, ".spinner")))
debug("loader appeared")

# 3. execute a wait statement
wait.until(EC.invisibility_of_element_located((SelectBy.CSS_SELECTOR, ".spinner")))
debug("loader disappeared")

两个wait语句(#2和#3)使用相同的wait对象,因此它们的执行将“stack”

  1. 等待对象将等待10秒,等待条件
  2. 等待10秒(继承)+微调器出现
  3. 等待10秒(继承的)+微调器出现(继承的)+微调器消失

动作2等待10秒。行动#3等待20秒

来自Waits的文件

Warning: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times. For example, setting an implicit wait of 10 seconds and an explicit wait of 15 seconds could cause a timeout to occur after 20 seconds.

可能是以下两种等待的混合:

  • 全局隐式等待为20秒
  • WebDriverWait(驱动程序,10)

正在导致不可预测的等待时间


解决方案

在诱导WebDriverWait时,需要使用以下代码行将implicit wait重新配置为0

  • Python:

    driver.implicitly_wait(0)
    
  • Java

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    
  • DotNet

    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
    

相关问题 更多 >

    热门问题