有沒有一種方法可以讓我等待兩個元素中的一個加載到硒中。我正在使用明確的等待方式,至今未能找出解決方案。Python硒:顯式等待加載兩個元素中的一個
簡單地做
WebDriverWait(driver,5).until(lambda driver : driver.find_element(By.ID,"a") or driver.find_element(By.ID,"b"))
似乎並沒有工作。它只是尋找id =「a」的元素。
謝謝!
有沒有一種方法可以讓我等待兩個元素中的一個加載到硒中。我正在使用明確的等待方式,至今未能找出解決方案。Python硒:顯式等待加載兩個元素中的一個
簡單地做
WebDriverWait(driver,5).until(lambda driver : driver.find_element(By.ID,"a") or driver.find_element(By.ID,"b"))
似乎並沒有工作。它只是尋找id =「a」的元素。
謝謝!
find_element
引發NoSuchElementException
如果找不到元素,則爲異常。
如果ID爲a
的元素不存在,driver.find_element(By.ID,"a")
將引發異常並且driver.find_element(By.ID,"b")
將不會執行。
一個簡單的方法來解決這個問題是使用find_elements
它返回空列表,而不是提高異常:
WebDriverWait(driver,5).until(
lambda driver: driver.find_elements(By.ID,"a") or driver.find_elements(By.ID,"b"))
它清除了我的lambda的概念,直到等待一個真實的案例。 – SIslam
由於falsetru explained,如果你的第一find_element
呼叫失敗找一個元素,它將引發NoSuchElementException
和你的測試的第二部分將不會執行。
我會建議使用可以匹配你正在尋找要麼ID的CSS選擇器:
WebDriverWait(driver, 5).until(
lambda driver : driver.find_element_by_css_selector("#a, #b"))
這已超過執行兩個find_elements
電話becayse這會讓你的硒客戶端之間只有一個往返的優勢(你的腳本)和Selenium服務器。這應該總是比執行兩個find_elements
呼叫更快。在本地執行測試時,差異不會太大,但如果您遠程執行測試(例如使用Sauce Labs或瀏覽器堆棧),差異將會很大。
只需加載頁面,然後在「while while True」循環中對所需元素進行測試,每個循環等待半秒。 –