Selenium2(webdriver)_定位不到元素常見緣由及解決辦法

在作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."); }

乙醇的作法:

輸入圖片說明

相關文章
相關標籤/搜索