selenium+java三種等待方式

【碎碎念】
在進行UI自動化測試時,需要等元素加載完成,才能對元素進行操作,不然找不到元素會報錯,因此需要增加等待
上篇selenium+java元素定位的使用中,用到了三種等待方式,強制等待、隱式等待、顯式等待。
看了一些視頻、資料,發現上篇關於等待部分有一些坑。這篇來學習並排下坑吧。
有表述不正確的,歡迎指正。 
selenium waits文檔: https://www.selenium.dev/documentation/en/webdriver/waits/ 
【正文】
三種等待方式:
1.隱式等待Implicit Wait
一直等待頁面加載完成,直至超時。
在創建webDriver後添加這行代碼:
    driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);//隱式等待

注意1:
Warning: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times. 
For example, setting an implicit wait of 10 seconds and an explicit wait of 15 seconds could cause a timeout to occur after 20 seconds. 
警告: 請勿混合使用隱式和顯式等待。這樣做可能導致無法預測的等待時間。例如,將隱式等待設置爲10秒,將顯式等待設置爲15秒,則可能導致20秒後發生超時。
(上篇就混用了...)

注意2:
 An implicit wait is to tell WebDriver to poll the DOM for a certain amount of time when trying to find an element or elements if they are not immediately available.
 The default setting is 0, meaning disabled. Once set, the implicit wait is set for the life of the session. 
隱式等待是告訴WebDriver在嘗試查找一個或多個元素(如果它們不立即可用)時輪詢DOM一定時間。默認設置爲0,表示已禁用。設置後,將在會話生命週期內設置隱式等待。
即:隱式等待是針對全局的設置


2.強制等待
不管頁面是否加載完,強制指定等待時間後繼續執行。不建議用這種方式。
示例:Thread.sleep(20000);// 休眠20秒
3.顯式等待 Explicit Wait
需要調用的元素加載完成即可執行下一步。
上篇示例:
 WebDriverWait wait = new WebDriverWait(driver, 20, 5); //顯示等待 /*根據link text定位元素*/          
 WebElement findPwd =wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("找回密碼")));     
   
PS:官網還介紹了一種等待方式:流暢等待
官網代碼示例:
// Waiting 30 seconds for an element to be present on the page, checking
// for its presence once every 5 seconds.
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
  .withTimeout(Duration.ofSeconds(30))//最大等待時間是30s
  .pollingEvery(Duration.ofSeconds(5))//每隔5s去找一次元素是否在頁面顯示
  .ignoring(NoSuchElementException.class);//忽略NoSuchElement異常

WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
//等待條件
  public WebElement apply(WebDriver driver) {
    return driver.findElement(By.id("foo"));
  }
});
WebDriverWait 繼承 FluentWait。 
https://blog.csdn.net/weixin_39218743/article/details/86699516 【侵權刪】
FluentWait 和 Explicit Wait的區別:
Explicit Wait裏有一些設定好了的前置條件的等待方式,而Fluent wait你可以設置自己的方法去處理各種等待的問題。


【時刻面試】
Q:軟件測試的流程?
A:測試需求分析階段:閱讀需求、理解需求
->測試計劃階段:編寫測試計劃
-->測試設計階段:編寫測試用例
-->測試執行階段:搭建測試環境、執行測試、提交缺陷報告、迴歸測試等
-->測試評估階段:測試報告

Q:post和get的區別?
A: (w3cschool)
GET在瀏覽器回退時是無害的,而POST會再次提交請求。
GET產生的URL地址可以被收藏爲書籤 ,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
GET請求只能進行url編碼,而POST支持多種編碼方式。
GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
GET請求在URL中傳送的參數是有長度限制的(2k),而POST沒有。
對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
GET比POST更不安全,因爲參數直接暴露在URL上,所以不能用來傳遞敏感信息。
GET參數通過URL傳遞,POST放在Request body中。 
GET產生一個TCP數據包,POST產生兩個TCP數據包。
另外,看完這個博主的分析https://www.cnblogs.com/logsharing/p/8448446.html 我好像明白了什麼。

GET和POST是 HTTP協議中的兩種發送請求的方法,其底層都是TCP/IP協議。
HTTP對GET和POST參數的傳送渠道(url還是requrest body)提出了要求:GET參數通過URL傳遞,POST放在Request body中;
不同瀏覽器和服務器對參數大小的限制不同:GET請求在URL中傳送的參數是有長度限制的(2k),而POST沒有;
GET和POST最重要的區別是GET產生一個TCP數據包,POST產生兩個TCP數據包。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章