4 回答

TA貢獻1804條經驗 獲得超3個贊
要繼續循環并在Selenium檢測到頁面上某個元素中有文本時停止,您可以使用以下定位器策略:
while True:
? ? try:
? ? ? ? WebDriverWait(driver, 5).until(EC.invisibility_of_element((By.XPATH, "element_xpath")))
? ? ? ? #do stuff
? ? ? ? continue
? ? except:
? ? ? ? break
#do something else

TA貢獻1893條經驗 獲得超10個贊
您可以嘗試text_to_be_present_in_element
預期的條件并實現ExplicitWait,如下所示:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get(URL)
timeout = <SET MAXIMUM AMOUNT OF TIME IN SECONDS TO WAIT>?
your_text = '<REQUIRED TEXT>'
element = WebDriverWait(driver, timeout).until(EC.text_to_be_present_in_element((By.ID, "<ElementID>"), your_text))
一旦出現所需的文本,這將返回元素

TA貢獻1815條經驗 獲得超10個贊
下面的代碼將獲取所需的元素,然后循環直到它顯示(可見)。在循環結束時,您可能需要重新獲取元素(以防頁面更改),然后再檢查它是否顯示在循環頂部。
element = driver.find_element_by_XXX(locator)
while not element.is_displayed():
#do stuff
element = driver.find_element_by_XXX(locator)
#when element is visible break out of statement and do something else
我還要補充一點,您可能希望有一個循環轉義,以防元素永遠不可見。為此,您可以在進入循環之前獲取當前時間,然后檢查條件while以確保自開始時間以來時間不超過 30 秒。這樣你的腳本就不會陷入無限循環。

TA貢獻1865條經驗 獲得超7個贊
我正在 C# 中為 Selenium 進行編碼,但從未在 while 循環中實際使用過它,但我使用隱式等待來使我的測試等待,直到我正在尋找的元素可用。該函數很容易編寫,但我不確定這是否適合您。
_ = driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
基本上,Selenium 會等待元素可用或總共 30 秒,如果元素不可用,則測試失敗。
添加回答
舉報