關於RF對於不在螢幕內的頁面元素的處理辦法

賀滿發表於2013-10-29

1、碰到的問題:

最近在公司用Robot framework+Selenium2Library做專案,碰到部分頁面比較長,無法完全顯示在螢幕內,需要上下滾動滾動條才能看到下半部分的頁面元素。於是呼,問題就來了,當我操作未在螢幕內的”繼續”按鈕(實際是一個超連結)時,案例失敗,提示:

ElementNotVisibleException: Message: u'Cannot click on element'。

HTML程式碼:

<A id=submitButton title=繼續href="javascript:void(0)" >繼續>繼續</A>

 

2、解決過程:

a)  起初我以為RF不能識別不在螢幕內的頁面元素,諮詢同事說可以處理,於是自己又開始研究,發現RF確實可以識別不在幕內的頁面元素(比如輸入框)。通過先對輸入框進行賦值操作後,由於螢幕自己下拉繼續按鈕已經顯示在螢幕內了,於是問題看上去似乎解決了。

b)  然而,好景不長,另一個頁面出現了同樣的問題而且只有一個繼續按鈕不在螢幕內(無法使用a中先操作其它元素的辦法解決),當案例執行到這一步時我手工把頁面下拉使按鈕顯示出來,這時就不會有問題,於是我斷定點選按鈕操作時螢幕沒有下拉,而RF操作時又必須要元素顯示在螢幕內。隨即我又開始研究Selenium2Library庫,一個一個的看S2L庫的關鍵字,發現了Foucs關鍵字,於是抱著試一試的心理在點選繼續按鈕前加上了這個Foucs關鍵字使焦點定位到按鈕上,當執行到這一步時繼續按鈕出現在螢幕上,問題隨之徹底解決,很是開心啊!!!

 

3、總結:

a)   首先,RF對於不在螢幕內的頁面元素是可以識別的,RF定位到不在螢幕內的物件會自行下移螢幕。但是對於點選按鈕操作,RF沒有自行下移螢幕,所以無法進行操作,要想辦法使元素能在螢幕中顯示出來,focus關鍵字就很有用處了,因為它要定位焦點,而且會把螢幕下拉,這樣一來不在螢幕內的元素就可以顯示進行操作了。

b)  Execute Javascript 關鍵字: 這是S2L庫中的一個關鍵字,可以用來執行JS指令碼,我覺得這也可以解決上述問題,有時間在研究研究。

 

 

相關文章