為了解釋背景關系,讓我們以登錄頁面為例。
假設登錄頁面僅允許用戶在輸入用戶名后等待 1 分鐘后輸入密碼(請假設)。
因此,首先只有用戶名欄位將在頁面上可見。然后 1 分鐘后,密碼將可見。但是,當頁面加載時,這兩個欄位都存在于 html 中,并且欄位 ID 在隱藏時和等待時間后可見時不會更改。
因此,以下代碼為第二次操作(密碼)給出了“元素不可互動”錯誤。
WebDriverWait(browser,10).until(EC.presence_of_element_located((By.ID, 'username'))).send_keys(usr)
WebDriverWait(browser,70).until(EC.presence_of_element_located((By.ID, 'password'))).send_keys(pwd)
如果我一次運行此代碼一行,同時手動等待密碼欄位加載到頁面上,則該代碼有效。等待時間是60秒,我已經計時了。
但是我將所有內容作為一個檔案一起運行,然后它幾乎在 2 秒內給出了元素不可互動的錯誤。可能是因為until它會立即找到元素 ID,即使它隱藏在 UI 上,但存在于 html 中。
我們如何處理這種延遲?
uj5u.com熱心網友回復:
您應該更改presence_of_element_located為visibility_of_element_located.
WebDriverWait(browser,100).until(EC.visibility_of_element_located((By.ID, 'username'))).send_keys(usr)
WebDriverWait(browser,100).until(EC.visibility_of_element_located((By.ID, 'password'))).send_keys(pwd)
應該管用。
有幾個預期條件。
正如您從他們的名字中看到的那樣,presence_of_element_located正在等待與傳遞的定位器匹配的元素的存在visibility_of_element_located,同時將等待該元素的可見性。
通常,您應該始終使用,visibility_of_element_located因為此方法正在等待元素變得可見和可互動,而presence_of_element_located將回傳尚未完全呈現的元素等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415636.html
標籤:
