web自動化測試,定位不到元素的原因及解決方案(持續更新中2018年9月29日)


主要講自己在實戰中遇到的坑:

 

1.動態id定位不到元素

分析原因:每次打開頁面,ID都會變化。用ID去找元素,每次刷新頁面ID都會發生變化。

解決方案:推薦使用xpath的相對路徑方法或者cssSelector查找到該元素。
      

2.iframe原因定位不到元素

分析原因:你要找的元素在某個框架(frame)里面

解決方案:跳轉到該框架里,再查找元素。

     driver.switchTo().frame("login_frame");

     driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[frameborder='0']")));

     driver.switchTo().frame(driver.findElement(By.tagName("iframe")); 

 

3.要返回到某frame外找元素

分析原因:當你進入某個框架,找到某元素。接下來又想找一個框架外的元素的時候,需要跳出該框架再找元素。

解決方案:執行下面這句代碼,pareneFrame是父類,從當前框架跳轉到父類的框架里。

      driver.switchTo().parentFrame(); 

 

4.不在同一個frame里邊查找元素

分析原因:頁面左邊一欄屬於left_frame,右側屬於right_frame的情況,此時如果當前處在left_frame,就無法通過id定位到right_frame的元素

解決方案:通過以下語句切換到默認的content:

      driver.switchTo().defaultContent();

 

5. xpath描述錯誤
分析原因:描述路徑的時候沒有按照xpath的規則來寫 造成找不到元素的情況出現

解決方案:修改路徑寫法,或者用其他方式,個人最推薦css。

    

 

6.頁面元素未加載完
分析原因:在找元素前,頁面還沒加載好,所以那些元素都不存在。

解決方案:等待時間。有三種方式(強制等待,隱式等待,智能等待)

     Thread.sleep(5000); //強制等待5000毫秒

 

7.元素隱藏起來了

分析原因:窗口在不是最大化的情況下,前端頁面元素只會顯示局部,所以找不到啊。

解決方案:在找元素前,執行一句,瀏覽器最大化窗口,這樣隱藏的元素就會全部出現了。最好寫在beforetest里。

        driver.manage().window().maximize();

8.firefox安全性強,不允許跨域調用出現報錯

分析原因:它的錯誤描述為uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location:

解決方案:Firefox 要取消XMLHttpRequest的跨域限制。

     第一是從 about:config 里設置

     signed.applets.codebase_principal_support = true; (地址欄輸入about:config 即可進行firefox設置)
     第二就是在open的代碼函數前加入類似如下的代碼:

     try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); } catch (e) { alert("Permission UniversalBrowserRead denied."); }

 


免責聲明!

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



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