2014-12-22 102 views
4

有沒有一種方法可以讓我等待兩個元素中的一個加載到硒中。我正在使用明確的等待方式,至今未能找出解決方案。Python硒:顯式等待加載兩個元素中的一個

簡單地做

WebDriverWait(driver,5).until(lambda driver : driver.find_element(By.ID,"a") or driver.find_element(By.ID,"b")) 

似乎並沒有工作。它只是尋找id =「a」的元素。

謝謝!

+0

只需加載頁面,然後在「while while True」循環中對所需元素進行測試,每個循環等待半秒。 –

回答

5

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")) 
+0

它清除了我的lambda的概念,直到等待一個真實的案例。 – SIslam

1

由於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或瀏覽器堆棧),差異將會很大。