主要講自己在實戰中遇到的坑:
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."); }