[英]How to get rid of the hardcoded sleep()?
def textfield(boxid,textadded):
project = driver.find_element_by_id(boxid)
project.send_keys(textadded)
sleep(3)
def dropdown(dropdownid, dropdownvalue):
select = Select(driver.find_element_by_id(dropdownid))
select.select_by_visible_text(dropdownvalue)
sleep(5)
這兩個函數都起作用,但是我正在使用sleep()
,這是一個不好的做法,因為某些下拉列表和文本字段需要比其他字段更長的時間來填充,因此我必須使用最長的睡眠值才能避免出錯,如何我使用等待修復了這兩個功能。
您可以顯式等待該元素。 在此處閱讀有關等待的更多信息。 請注意,這不是官方文檔。
#.....
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#......
select=WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID ,dropdownid)))
#....
在WebElement 項目上調用send_keys()
時,理想情況下,應使用EC作為element_to_be_clickable
調用WebDriverWait ,因此您必須:
更換:
def textfield(boxid,textadded): project = driver.find_element_by_id(boxid) project.send_keys(textadded) sleep(3)
與:
def textfield(boxid,textadded): WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "boxid"))).send_keys(textadded)
作為下拉需要更長的時間來填補,所以你應該調用WebDriverWait與EC作為visibility_of_element_located
,所以你必須:
更換:
def dropdown(dropdownid, dropdownvalue): select = Select(driver.find_element_by_id(dropdownid)) select.select_by_visible_text(dropdownvalue) sleep(5)
與:
def dropdown(dropdownid, dropdownvalue): select = Select(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.ID, "dropdownid")))) select.select_by_visible_text(dropdownvalue)
注意 :您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您應該使用WebDriverWait !
您可以在所選項目列表中使用presence_of_all_elements_located
...
一個例子:
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
WebDriverWait(driver, 10).wait.until(EC.presence_of_all_elements_located((By.ID, dropdownid)))
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.