aspx ttf文件加载不出来_加载页面信息,刷不出来心态都崩了
出品 | 51Testing軟件測試網
只要訪問過網頁的地球人都知道,很多時候頁面內容的加載并非與你的訪問操作實時同步顯現。是什么原因導致的呢?這是由于大多數Web應用程序都結合Ajax/Javascript技術開發,當瀏覽器進行頁面信息加載時,頁面中的元素會在不同的時間間隙內陸續完成加載,比較常見的場景諸如:跟隨你的滾動條下滑,逐步呈現當前圖文信息;鼠標懸停某文本框,自動出現提示文本等。
對于Web自動化測試而言,頁面元素呈現的時間差異會讓元素識別變得相對困難,在未能找到指定元素的情況下,還會引發各種異常報錯,如“Element not found”等。所幸的是Selenium WebDriver提供了不同的等待類型,助我們較好地解決此類難題。
Selenium WebDriver為用戶提供了“隱式等待”& “顯式等待”兩種等待方式,用于處理重復的頁面加載,頁面元素加載,窗口顯示,彈窗,錯誤消息及Web元素在網頁上的呈現形式,下面我們就這兩種等待形式逐一詳解。
01WebDriver隱式等待
Selenium中的隱式等待用于通知WebDriver在拋出類似“Element not found”之前要等待一定的時間,默認設置為0。一旦設置了時間,WebDriver將在該時間內等待該元素,超過等待時間后,如還未找到該元素,則觸發相應的異常。
隱式等待服務于當前的整個測試腳本, 即:提供整個測試腳本中每個連續測試步驟/命令之間的默認等待時間(例如自行設置默認等待時間為20秒)。因此,僅當在執行前一個測試步驟/命令后經過20秒時才能執行后續測試步驟。
如下Selenium - Python示例中聲明了一個隱式等待,其時間范圍為10秒。這意味著,如果該元素不在10秒內出現在頁面上,就會引發異常。
隱式等待語法(時間以秒為單位):
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在引發類似“Element not found”異常之前,需要先在設置的最大延遲時間內等待某些期望條件的出現,這是一種比較聰明的等待方式,但是它只能應用于指定的元素。與隱式等待相比,顯式等待提供了更好的選擇,因為它可以用來等待動態加載的Ajax元素,針對性和靈活度更強。
如下示例中,我們實現以下操作:
(1)登錄QQ郵箱基礎版;
(2)然后創建顯式等待;
(3)等待頁面元素“收件箱”的出現,并且給出的最大時間范圍為20秒;
(4)若元素成功出現,獲取元素文本信息,并點擊該元素。
顯式等待語法(時間以秒為單位):
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 秒, 等待“收件箱”的出現 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()以上場景中,設定在規定時間內(20秒)等待“收件箱”元素的出現,這里的條件設置“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]'),"常聯系"))(3)title_is()
預期條件:等待帶有指定標題的頁面
示例代碼:
element = WebDriverWait(self.driver, 20)element.until(EC.title_is("登錄QQ郵箱"))03隱式等待 VS 顯式等待
如果在測試中存在必須同時使用隱式和顯式等待的情況, 假定隱式等待時間設置為20秒,顯式等待時間設置為10秒。
顯式等待中試圖找到一個具有“ ExpectedConditions”條件等待的元素,如果該元素不在顯式等待(10秒)定義的時間范圍內,那么將使用隱式wait( 20秒)之后,如還未出現再拋出“ElementNotFound”之類的異常。
04總結
以上基于Selenium WebDriver中的兩類等待進行深入解析,隱式和顯式這兩種等待各有其優勢,大家在Web自動化測試腳本編寫過程中,需要根據實際情況,恰當地使用隱式和顯式等待。?
END思考:只針對findelement方法生效的等待方式是哪一個?歡迎小伙伴們在評論區暢所欲言,友好交流~
推薦閱讀點擊閱讀?WebDriver和瀏覽器間的競爭關系,Selenium竟然能解決!
點擊閱讀?如何在Python上進行Selenium的彈框操作?
點擊閱讀?想知道Selenium自動化會遇到哪些常見問題?你算來對了!
點擊閱讀?從零到設計Python+Selenium自動化測試框架,如何開始?
點擊閱讀?不可不知的Selenium 8種元素定位方法!
戳 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的aspx ttf文件加载不出来_加载页面信息,刷不出来心态都崩了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: error response from
- 下一篇: python pypdf2另存为图片_用