原文地址:http://m.blog.csdn.net/m0_37553368/article/details/78016729
在基於RobotFramework框架使用Selenium2Library庫對web系統做UI自動化時經常會遇到元素定位不到的問題,就我目前所遇到的情況,除元素本身定位有誤外,大致有5類問題導致元素定位不到,即休眠時間較短、未進入frame、未進行窗口跳轉、元素被隱藏、元素為只讀。其中,元素被隱藏的解決方法我有參考網上的資料,參考鏈接見正文。
1. 等待時間太短,頁面元素還沒加載出來,或者沒加載全。 ----------解決方案:加長等待時間
sleep 10
2. 元素在frame中,需要先進入該frame。有時一個頁面內部分元素變化需要先跳出該frame再進入另一個frame
*1*進入frame后頁面無變化 --------直接進入frame
*2*進入frame后頁面有變化,比如執行搜索后頁面展示的數據變化,對變化的數據進行操作
----需要先跳出該frame再進入另一個frame進行操作,有時候兩個frame名稱一樣,但仍須先跳出
*3*進入嵌套frame進行操作 ------先進入外層frame,再進入內層frame,如果有多級嵌套的話,需要一級一級地進入,不能越級
需要關鍵字
select frame frame ID或具體locator
3. 窗口跳轉,在窗口“title1”執行一個操作后跳轉到窗口”title2“,對后者的元素進行操作時如果不在腳本里執行窗口跳轉的動作,就容易報元素找不到的問題。
需要關鍵字
select window title2
4.元素被隱藏,對於元素屬性為hidden的情況,需要先執行JS,使元素可見,再對元素進行操作
元素隱藏的方式有:
*1*在css中隱藏:
| 類型 | 案例 | 執行JS |
| visibility: hidden | img#dice { float: right; margin-left: 2em; visibility: hidden; } |
document.getElementById("EleId").style.visibility="visible"; |
| opacity: 0 | img#dice { float: right; margin-left: 2em; opacity: 0; } |
document.findElementById('EleId').style.opacity='1' |
| position: absolute | img#dice { position: absolute; left: -1000px; } |
增加left的值,例如: document.findElementById('EleId').style.left='-2000px' |
| display: none | img#dice { display: none; } | document.findElementById('123').style.display |
*2*表單中隱藏,例如:
<input type="hidden" name="field_name" value="value">
解決方案:將type="hidden" 改為 type="text",詳見:
http://blog.csdn.net/superit401/article/details/52094618
Execute Javascript document.findElementByName('field_name').prop('type','text');
5.元素為只讀屬性。
比如上圖 入職時間輸入框,如果直接輸入,會報錯,這時將只讀屬性去掉即可,解決方案為,執行輸入操作前,先執行:
Execute Javascript document.getElementById('d4311').removeAttribute('readonly')
