[英]How to set a wait condition in selenium python test
我想問一下如何解決測試中的時間延遲。 我現在有一個像這樣的腳本:
WebDriverWait (self.browser, 20) .until (EC.element_to_be_clickable ((By.ID, "Login1_LoginButton"))).
sleep (5) \ t
self.assertEqual ("Page 1 | Hotline", self.browser.title)
print ("Login OK")
登錄后檢查頁面名稱時,這是對應用程序的登錄。 由於Internet的速度,它並非總是最佳狀態,有時測試會失敗。 最好在這里放置一個條件,以等待應用程序登錄然后檢查。 也給那里睡覺(5)我找到了錯誤的解決方案。 有想法嗎
富人
成功登錄后,您必須確定哪個元素顯示在最后一個元素中,然后編寫該元素的定位符並傳入Web驅動程序命令。 WebDriverwait是為此的最佳解決方案:
點擊登錄按鈕后,您可以聲明頁面名稱,如下所示:
wait = WebDriverWait(self.browser, 10)
element = wait.until(EC.visibility_of_element_located((By.ID, 'id of web page heading or any element that loads after')))
self.assertEqual ("Page 1 | Hotline", self.browser.title)
print ("Login OK")
請注意,這種情況的最極端情況是time.sleep()
,它將條件設置為要等待的確切時間段。
你可以參考官方鏈接
像下面這樣設置您的等待條件,它對我有用。 如果沒有工作,請告訴我。 並且不要與self.browser和self.assertEqual混淆,我沒有使用self,因為,這對我有用,而無需創建類。 如果要創建類和方法,則應聲明自變量。 對於我的程序,我剛剛創建了方法並運行並聲明為全局變量。如下所示,
def setup():
global driver
driver = webdriver.Chrome(executable_path="")
driver.maximize_window()
def execute():
wait = WebDriverWait(browser, 10)
element = wait.until(EC.visibility_of_element_located((By.ID, 'id of web
page heading or any element that loads after')))
assertEqual ("Page 1 | Hotline", self.browser.title)
print ("Login OK")
有關用例的更多信息將有助於我們構建更規范的答案。 但是,您可以考慮以下方法:
如果您的用例是要斷言頁面標題 ,則可以為<body>
標記內的任何元素(例如頁面標題)引入WebDriverWait ,這意味着此時頁面標題,即<title>
標記(始終是<head>
標記的一部分)必然要在<body>
標記內的元素之前渲染,您可以使用以下解決方案:
WebDriverWait (self.browser, 20) .until (EC.visibility_of_element_located ((By.CSS_SELECTOR, "css_page_header"))) self.assertEqual ("Page 1 | Hotline", self.browser.title) print ("Login OK")
您還可以誘導WebDriverWait的頁面標題包含某些文本(例如熱線) ,然后聲明完整的頁面標題 ,如下所示:
WebDriverWait (self.browser, 20) .until (title_contains("Hotline")) self.assertEqual ("Page 1 | Hotline", self.browser.title) print ("Login OK")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.