關於 lambda 在 WebDriverWait () 中的用法實在不明白

wskuku發表於2020-08-06
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver=webdriver.Firefox()
driver.get()
WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))

用法:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
通過from selenium.webdriver.support.wait import WebDriverWait匯入模組

  1. driver:瀏覽器驅動
  2. timeout:最長超時時間,預設以秒為單位
  3. poll_frequency:檢測的間隔步長,預設為0.5s
  4. ignored_exceptions:超時後的丟擲的異常資訊,預設丟擲NoSuchElementExeception異常。

until:
WebDriverWait(driver,10).until(method,message="")
呼叫該方法提供的驅動程式作為引數,直到返回值為True

問題:實在不明白的一點是,WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))這段裡面until()傳入的是lambda,一般正常使用傳入的為find_element_byid("someId")之類的驗證資訊,但是這裡用lambda代替了,我不太理解的是lambda裡的x不應該是形參嗎,這裡什麼都沒傳進去為什麼還能執行,好像下面這樣:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver=webdriver.Firefox()
driver.get()
lambda_method = lambda x: x.find_element_by_id("someId") #<----------here
WebDriverWait(driver, 10).until(lambda_method()) #<----------here 不應該傳入driver麼?

定義了lambda卻什麼都沒傳進去。麻煩各位大神指導一下~

相關文章