aspx ttf文件加载不出来_加载页面信息,刷不出来心态都崩了
出品 | 51Testing軟件測試網(wǎng)
只要訪問過網(wǎng)頁的地球人都知道,很多時候頁面內(nèi)容的加載并非與你的訪問操作實時同步顯現(xiàn)。是什么原因?qū)е碌哪?#xff1f;這是由于大多數(shù)Web應用程序都結(jié)合Ajax/Javascript技術開發(fā),當瀏覽器進行頁面信息加載時,頁面中的元素會在不同的時間間隙內(nèi)陸續(xù)完成加載,比較常見的場景諸如:跟隨你的滾動條下滑,逐步呈現(xiàn)當前圖文信息;鼠標懸停某文本框,自動出現(xiàn)提示文本等。
對于Web自動化測試而言,頁面元素呈現(xiàn)的時間差異會讓元素識別變得相對困難,在未能找到指定元素的情況下,還會引發(fā)各種異常報錯,如“Element not found”等。所幸的是Selenium WebDriver提供了不同的等待類型,助我們較好地解決此類難題。
Selenium WebDriver為用戶提供了“隱式等待”& “顯式等待”兩種等待方式,用于處理重復的頁面加載,頁面元素加載,窗口顯示,彈窗,錯誤消息及Web元素在網(wǎng)頁上的呈現(xiàn)形式,下面我們就這兩種等待形式逐一詳解。
01WebDriver隱式等待
Selenium中的隱式等待用于通知WebDriver在拋出類似“Element not found”之前要等待一定的時間,默認設置為0。一旦設置了時間,WebDriver將在該時間內(nèi)等待該元素,超過等待時間后,如還未找到該元素,則觸發(fā)相應的異常。
隱式等待服務于當前的整個測試腳本, 即:提供整個測試腳本中每個連續(xù)測試步驟/命令之間的默認等待時間(例如自行設置默認等待時間為20秒)。因此,僅當在執(zhí)行前一個測試步驟/命令后經(jīng)過20秒時才能執(zhí)行后續(xù)測試步驟。
如下Selenium - Python示例中聲明了一個隱式等待,其時間范圍為10秒。這意味著,如果該元素不在10秒內(nèi)出現(xiàn)在頁面上,就會引發(fā)異常。
隱式等待語法(時間以秒為單位):
selenium.webdriver.driver.implicitly_wait(time in seconds)
場景一:僅獲取當前頁面標題
from selenium import webdriverimport unittestclass Wait_demo1(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get("https://mail.qq.com/") self.driver.maximize_window() self.driver.implicitly_wait(10) def test_title(self): t = self.driver.title if(t=="登錄QQ郵箱"): print("\nPASS") else: print("\nFAIL") def tearDown(self): self.driver.quit()02WebDriver顯式等待
Selenium中的顯式等待用于通知WebDriver在引發(fā)類似“Element not found”異常之前,需要先在設置的最大延遲時間內(nèi)等待某些期望條件的出現(xiàn),這是一種比較聰明的等待方式,但是它只能應用于指定的元素。與隱式等待相比,顯式等待提供了更好的選擇,因為它可以用來等待動態(tài)加載的Ajax元素,針對性和靈活度更強。
如下示例中,我們實現(xiàn)以下操作:
(1)登錄QQ郵箱基礎版;
(2)然后創(chuàng)建顯式等待;
(3)等待頁面元素“收件箱”的出現(xiàn),并且給出的最大時間范圍為20秒;
(4)若元素成功出現(xiàn),獲取元素文本信息,并點擊該元素。
顯式等待語法(時間以秒為單位):
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver,time).until(expected_conditions.設置等待條件)
場景二:成功登錄后,獲取收件箱元素文本信息,點擊收件箱
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait#定義了變量EC表示expected_conditionsfrom selenium.webdriver.support import expected_conditions as ECimport unittestclass ECwait_Demo1(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get("https://mail.qq.com/") self.driver.maximize_window() def test_login_mail(self): # 定位到“基本版”,并點擊 self.driver.find_element(By.LINK_TEXT,"基本版").click() # 輸入用戶名和密碼 self.driver.find_element(By.ID,"u").send_keys("有效賬號") self.driver.find_element(By.ID,"p").send_keys("有效密碼") # 點擊登錄按鈕 self.driver.find_element(By.ID,"go").click() # 顯式等待 20 秒, 等待“收件箱”的出現(xiàn) element = WebDriverWait(self.driver,20) element.until(EC.visibility_of_element_located((By.XPATH,'//*[@id="ct"]/div/div[3]/div[1]/div[1]'))) # 獲取“收件箱”元素中的文本 mail_box = self.driver.find_element(By.XPATH,'/html/body/div/section[1]/div/ul/li[1]/a/span[2]/span[1]') # 打印文本 print(mail_box.text) # 點擊收件箱 mail_box.click() def tearDown(self): self.driver.quit()以上場景中,設定在規(guī)定時間內(nèi)(20秒)等待“收件箱”元素的出現(xiàn),這里的條件設置“ExpectedConditions”為“visibility_of_element_located”。
顯式等待之所以靈活,還有一個原因是Selenium給我們提供的各類預期條件,除了上面的“visibility_of_element_located”還有(在pycharm中可以通過智能下拉列表來找到當前你需要的那個“預置條件”):
ExpectedConditions帶有多種預期條件:
基于ExpectedCondition預期條件種類較多,下面我們簡單介紹幾個常用的方面,其余以此類推,供大家有興趣自行嘗試:
(1)element_to_be_clickable(element locator)?
預期條件:等待直到該元素可單擊,即該元素應在屏幕上顯示/可見/可操作;
示例代碼:
element = WebDriverWait(self.driver, 20)element.until(EC.element_to_be_clickable((By.ID,"qqLoginTab")))(2)textToBePresentInElement(element locator,string txt)
預期條件:等待含有指定字符串的元素;
示例代碼:
element = WebDriverWait(self.driver, 20)element.until(EC.text_to_be_present_in_element((By.XPATH,'/html/body/div/div[2]/div[2]/div[2]/div[2]/p[1]'),"常聯(lián)系"))(3)title_is()
預期條件:等待帶有指定標題的頁面
示例代碼:
element = WebDriverWait(self.driver, 20)element.until(EC.title_is("登錄QQ郵箱"))03隱式等待 VS 顯式等待
如果在測試中存在必須同時使用隱式和顯式等待的情況, 假定隱式等待時間設置為20秒,顯式等待時間設置為10秒。
顯式等待中試圖找到一個具有“ ExpectedConditions”條件等待的元素,如果該元素不在顯式等待(10秒)定義的時間范圍內(nèi),那么將使用隱式wait( 20秒)之后,如還未出現(xiàn)再拋出“ElementNotFound”之類的異常。
04總結(jié)
以上基于Selenium WebDriver中的兩類等待進行深入解析,隱式和顯式這兩種等待各有其優(yōu)勢,大家在Web自動化測試腳本編寫過程中,需要根據(jù)實際情況,恰當?shù)厥褂秒[式和顯式等待。?
END思考:只針對findelement方法生效的等待方式是哪一個?歡迎小伙伴們在評論區(qū)暢所欲言,友好交流~
推薦閱讀點擊閱讀?WebDriver和瀏覽器間的競爭關系,Selenium竟然能解決!
點擊閱讀?如何在Python上進行Selenium的彈框操作?
點擊閱讀?想知道Selenium自動化會遇到哪些常見問題?你算來對了!
點擊閱讀?從零到設計Python+Selenium自動化測試框架,如何開始?
點擊閱讀?不可不知的Selenium 8種元素定位方法!
戳 《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的aspx ttf文件加载不出来_加载页面信息,刷不出来心态都崩了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: error response from
- 下一篇: python pypdf2另存为图片_用