今天在寫Robot 的 Test Case時遇到了一個錯誤叫做: TypeError-- can't access dead object. 這是Selenium吐回來的錯誤。
該錯誤發生的時機點在於當進入一個有iFrame的網頁並且選擇其中一個iFrame進行作業之後,當離開該網頁時轉到下一個頁面時,若要在下一個頁面進行任何UI操作,便會出現這個 TypeError-- can't access dead object. 錯誤。
於是上網去查了一下,原因很簡單,就是當你離開iFrame頁面之後若沒有將視窗控制權由iFrame切轉回頁面的主視窗(MAIN Window),便會出現這個錯誤,因為你嘗試在一個沒有目標iFrame的頁面操作該iFrame的DOM物件,所以 ‘’can’t access dead object”。
如果你是在python 上遇到這個Error則只要在離開iFrame所在頁面後呼叫 這一行WebdriverObject.switch_to_default_content()程式碼,問題便可獲得解決,這意味著把網頁控制權交回給網頁主視窗畫面。
但現在是在RobotFramework,並不能直接call 副函式來用,所以我得花時間去找可以取代switch_to_default_content()的Keyword,最後終於千呼萬喚使出來,我找到了相對於Select Frame的Keyword: Unselect Frame ! 該Keyword就是把控制權從Selected iFrame釋放回到原來的視窗上。所以最後在Robot Framework上的Test Case結構便會向下面這樣:
Select Frame xpath=//iFrame[1] #選擇頁面上第一個iFrame
….
….
….
Click Link id=logout_link
UnSelect Frame #iFrame交回控制權,少了該行將出現 TypeError-- can't access dead object
Wait Until Element Is Visible name=username
只能說 Robot Framework在使用上還是跟寫程式的直覺性有很大的差異壓!
2017年12月27日星期三 6:59 PM
留言列表