在作web應用的自動化測試時,定位元素是必不可少的,這個過程常常會碰到定位不到元素的狀況,通常能夠從如下幾個方面着手解決:html
一、Frame/Iframe緣由定位不到元素:web
這個是最多見的緣由,首先要理解下frame的實質,frame中其實是嵌入了另外一個頁面,而webdriver每次只能在一個頁面識別,所以須要先定位到相應的frame,對那個頁面裏的元素進行定位。跨域
二、Xpath描述錯誤緣由:安全
這種狀況有多是:app
一、xpath語法規則書寫錯誤,這個木有辦法,補下xpath的語法,多寫寫,練練就好。函數
二、xpath層極太長,容易犯暈,好比我就寫過://div[@id='mainBody']//div[1]//div[1]//div[1]//div[1]//div[1]//div[1]//div[2]//ul[1]//li[1]//a[1]測試
雖然最後仍是調對了,調試的時候就是一層一層的定位,這種方法比耗時,但好在還算管用。firefox
最終的方法仍是要提升下寫xpath的水平。調試
三、頁面尚未加載出來,就對頁面上的元素進行的操做:code
這種狀況通常說來,能夠設置等待,等待頁面顯示以後再操做,這與人手工操做的原理同樣:
一、設置等待時間;缺點是須要設置較長的等待時間,案例多了測試就很慢;
二、設置等待頁面的某個元素出現,好比一個文本、一個輸入框均可以,一旦指定的元素出現,就能夠作操做。
三、在調試的過程當中能夠把頁面的html代碼打印出來,以便分析。
4.動態ID定位不到
解決方法:使用xpath的相對路徑來定位
5.firefox安全性強,不容許跨域調用出現報錯
錯誤描述: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: 解決辦法:
這是由於firefox安全性強,不容許跨域調用。
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."); }
乙醇的作法: