1. 程式人生 > >java selenium (十三) 智慧等待頁面載入完成

java selenium (十三) 智慧等待頁面載入完成

我們經常會碰到用selenium操作頁面上某個元素的時候, 需要等待頁面載入完成後, 才能操作。  否則頁面上的元素不存在,會丟擲異常。  

或者碰到AJAX非同步載入,我們需要等待元素載入完成後, 才能操作 

selenium 中提供了非常簡單,智慧的方法,來判斷元素是否存在.

閱讀目錄

  1. 例項要求 
  2. 隱式等待
  3. 顯式等待

例項要求 

例項:set_timeout.html 下面的html 程式碼,  點選click 按鈕5秒後, 頁面上會出現一個紅色的div快, 我們需要寫一段自動化指令碼智慧的去判斷這個div是否存在, 然後把這個div 然後高亮。

複製程式碼
<html>
    <
head> <title>Set Timeout</title> <style> .red_box {background-color: red; width = 20%; height: 100px; border: none;} </style> <script> function show_div(){ setTimeout("create_div()", 5000); }
function create_div(){ d = document.createElement('div'); d.className = "red_box"; document.body.appendChild(d); } </script> </head> <body> <button id = "b" onclick = "show_div()">click</button
> </body> </html>
複製程式碼

隱式等待

        WebDriver driver = new FirefoxDriver();
        driver.get("file:///C:/Users/Tank/Desktop/set_timeout.html");    
        
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        WebElement element = driver.findElement(By.cssSelector(".red_box"));      
        ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);  

其中

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

意思是, 總共等待10秒, 如果10秒後,元素還不存在,就會丟擲異常  org.openqa.selenium.NoSuchElementException

顯式等待

顯式等待 使用ExpectedConditions類中自帶方法, 可以進行顯試等待的判斷。 

顯式等待可以自定義等待的條件,用於更加複雜的頁面等待條件

等待的條件

WebDriver方法

頁面元素是否在頁面上可用和可被單擊

elementToBeClickable(By locator)

頁面元素處於被選中狀態

elementToBeSelected(WebElement element)

頁面元素在頁面中存在

presenceOfElementLocated(By locator)

在頁面元素中是否包含特定的文字

textToBePresentInElement(By locator)

頁面元素值

textToBePresentInElementValue(By locator, java.lang.String text)

標題 (title)

titleContains(java.lang.String title)

只有滿足顯式等待的條件滿足,測試程式碼才會繼續向後執行後續的測試邏輯

如果超過設定的最大顯式等待時間閾值, 這測試程式會丟擲異常。 

複製程式碼
    public static void testWait2(WebDriver driver)
    {
        driver.get("E:\\StashFolder\\[email protected]\\Stash\\Tank-MoneyProject\\浦東軟體園培訓中心\\我的教材\\Selenium Webdriver\\set_timeout.html");    
        
        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));
        WebElement element = driver.findElement(By.cssSelector(".red_box"));      
        ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);  
    }
複製程式碼

相關推薦

java selenium (十三) 智慧等待頁面載入完成

我們經常會碰到用selenium操作頁面上某個元素的時候, 需要等待頁面載入完成後, 才能操作。  否則頁面上的元素不存在,會丟擲異常。   或者碰到AJAX非同步載入,我們需要等待元素載入完成後, 才能操作  selenium 中提供了非常簡單,智慧的方法,來判斷元素是

selenium之如何等待頁面元素載入完成

webdriver中我們用兩種方式進行等待:明確的等待和隱性的等待。 明確的等待 明確的等待是指在程式碼進行下一步操作之前等待某一個條件的發生。最不好的情況是使用Thread.sleep()去設定一段確認的時間去等待。但為什麼說最不好呢?因為一個元素的載入時

WebDriver拾級而上·之九 等待頁面載入元素完成

web的自動化測試中,我們經常會遇到這樣一種情況:當我們的程式執行時需要頁面某個元素,而此時這個元素還未載入完成,這時我們的程式就會報錯。怎麼辦?等待。等待元素出現後再進行對這個元素的操作。 在selenium-webdriver中我們用兩種方式進行等待:明確的等待和隱

Selenium phantomjs與spynner等待網頁載入完成方式總結

利用無頭瀏覽器對網頁元素進行模擬操作時經常遇到的問題就是**元素不存在這樣的錯誤。原因大概有這麼幾種。 1. 網頁沒有載入完成,因此定位不到元素 2. 網頁元素顯示樣式設定為不可見,即display:none,常見的如一些懸停顯示的選單。 3. 元素在if

WebDriver- 等待頁面載入元素完成

隱性等待是指當要查詢元素,而這個元素沒有馬上出現時,告訴WebDriver查詢Dom一定時間。預設值是0,但是設定之後,這個時間將在WebDriver物件例項整個生命週期都起作用 <span style="font-size:14px;">package com

python爬蟲--selenium等待頁面載入

python爬蟲,使用selenium 等待頁面載入完成後,獲取頁面資訊 指定等待時長內沒有載入完成,丟擲異常 from selenium import webdriver from seleniu

從輸入URL到頁面載入完成都在哪些層經過了哪些步驟?

1、客戶端輸入URL並按下回車 2、瀏覽器查詢當前URL是否存在快取,並比較快取是否過期,沒有過期的話,直接跳到9 3、應用層DNS解析URL對應的IP 4、傳輸層根據IP建立TCP連結(三次握手) 5、連結成功後,應用層HTTP發起請求 6、伺服器處理請求,瀏覽器接收HTTP響

selenium driver.get(url) 頁面載入時間太長

在執行自動化測試用例過程中,發現因為網路慢或其他原因導致driver.get(url) 時,頁面一直在載入,頁面沒有載入完成就不會去繼續執行下面的動作,但是實際上需要操作的元素已經加載出來了。 解決方法 第一步:使用 set_script_timeout() 設定等待最大時間。 第二步:

從輸入url到頁面載入完成發生了什麼?

  這是一道經典的面試題,這道面試題不光前端面試會問到,後端面試也會被問到。這道題沒有一個標準的答案,它涉及很多的知識點,面試官會通過這道題了解你對哪一方面的知識比較擅長,然後繼續追問看看你的掌握程度。當然我寫的這些也只是我的一些簡單的理解,從前端的角度出發,

Vue.js 關於頁面載入完成後執行一個方法的問題

首先我們會想著在mounted或者created裡面加入想要執行的方法,但是有的時候會遇到在你執行這個方法的時候,頁面還並沒有被渲染完成,所以就會出現這個方法在匹配頁面標籤報錯的情況。 解決思路: 1.通過子頁面呼叫父頁面的方法,因為在子頁面開始渲染的時候,你的父頁面肯定

頁面載入完成後執行JS的5種方式

在js和jquery使用中,經常使用到頁面載入完成後執行某一方法。通過整理,大概是五種方式。 1.jQuery的$( function(){} ); 2.jQuery的$(document).rea

頁面載入完成

1、$(document).ready(function(){ alert("頁面載入完成!"); }); 簡寫: $(function(){ alert("頁面載入完成!"); }); 2、原生JS方法 window.onload=function(){ alert("

從輸入 URL 到頁面載入完成的過程中都發生了什麼事情?

本文為閱讀筆記,閱讀內容見此:http://fex.baidu.com/blog/2014/05/what-happen/ 今天拜讀了大神的博文,本意就是想清晰一下瀏覽器的工作原理,但沒想到大神講解的如此詳細精深,軟硬體結合,對我之前所學習的軟硬體知識

從輸入url到頁面載入完成發生了什麼?——前端角度

轉自http://www.cnblogs.com/daijinxue/p/6640153.html  我的github(PS:希望star):https://github.com/thWinterSun/v-admin  這是一道經典的面試題,這道面試題不光前端面試會問到,後

JS實現頁面載入完成之後自動重新整理一次

        先貼出程式碼,如果有興趣看我解題思路的可以看下,沒興趣的直接拿走用,節省時間。        window.onload = function(){var url=document.location.href;  //獲取瀏覽器訪問欄裡的地址       

解決webview多次載入,無法準確判斷頁面載入完成的問題

package com.brian; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.GradientDrawable.Orienta

chrome 新特性 —— 不允許視訊或音訊在頁面載入完成時自動播放

問題描述:為避免使用者在開啟頁面時突然出現視訊自動播放而出現聲音嚇到使用者,chrome瀏覽器從2018年開始不再支援單獨autoplay實現載入頁面視訊自動播放, 解決辦法:同時使用muted靜音視訊,以此實現靜音情況下載入頁面,視訊自動播放。 <video sr

一個頁面從輸入url到頁面載入完成究竟經歷了些什麼

本人經參考謝希仁著《計算機網路(第 5版)》、《HTTP權威指南》和網路上關於瀏覽器渲染原理的介紹,結合自己理解,整理出以下結論,如有不正確或者不完善之處歡迎指正: 當用戶在瀏覽器的位址列輸入要找的頁

Vue頁面載入完成後自動載入自定義函式

created: 在模板渲染成html前呼叫,即通常初始化某些屬性值,然後再渲染成檢視。 methods: { indexs:function(){ this.$http.post('{:url("Index/fu

Query學習--jQuery頁面載入完成事件

所有 jQuery 函式位於一個 document ready 函式中: $(document).ready(function(){    // 此處填寫頁面載入完成後要執行的操作 }); 這是為了防止文件在完全載入(就緒)之前執行 jQuery 程式碼。 如果