Selenium系列之--05 頁面元素找不到的分析思路


如果在測試過程中遇到了NoSuchElementException 這個異常, 說明元素查找失敗。

Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"abc"}

失敗的原因可能有很多,

常見的幾種可能性和對應解決辦法如下:

1. 定位沒有寫正確.

這點很重要,盡量在使用元素定位前用firepath等工具去調試下定位的准確性,為了避免引起其他問題,最好確保元素定位的唯一性.

2. 元素出現的時間有延遲,需要設置等待時間

現在的網頁中很多是有ajax交互的,你要尋找元素的時候,有可能是基於上面的步驟操作,才出現這個元素,而且由於網絡的原因,元素加載可能需要一定的時間,所以這里一定要在查找元素的時候使用等待。

Webdriver提供了兩種等待方式

1)implicitlyWait 隱式等待

-只需要實例化driver 之后加上代碼 dr.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS);即可

2)ExplicitlyWait 顯示等待

-這個在webdriver中是使用webdriverwait來描述的,可以結合ExpectedConditions這個類來使用

WebDriverWait wait = new WebDriverWait(dr, 30000);

wait.until(ExpectedConditions.visibilityOf(dr.findElement(By.xpath("//*[@id='xxx']"))));

3. 元素是在frame中的

這是一個常見的問題,稍微復雜的頁面其中就有可能有frame. 而且有些框架開發的網站使用了大量的frame. 比如ExtJs.

如果元素在frame中,我們只需要將driver切換到frame中去查詢就可以了

代碼可以是:

WebElement frame = dr.findElement(By.xpath("//*[@id='frameid']"));

dr.switchTo().frame(frame);

4. 元素是在另外一個窗口中的

這個應該是好判斷的,如果在操作過程中彈出了新窗口,我們要對新窗口中的元素進行查找和操作的話,我們首先要進行窗口的切換.

具體可以參考 http://www.webdriver.org/article-26-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM