close

  今天在寫Robot Test Case時遇到了一個錯誤叫做: TypeError-- can't access dead object. 這是Selenium吐回來的錯誤。

  該錯誤發生的時機點在於當進入一個有iFrame的網頁並且選擇其中一個iFrame進行作業之後,當離開該網頁時轉到下一個頁面時,若要在下一個頁面進行任何UI操作,便會出現這個 TypeError-- can't access dead object. 錯誤。

  於是上網去查了一下,原因很簡單,就是當你離開iFrame頁面之後若沒有將視窗控制權由iFrame切轉回頁面的主視窗(MAIN Window),便會出現這個錯誤,因為你嘗試在一個沒有目標iFrame的頁面操作該iFrameDOM物件,所以 ‘’can’t access dead object”

  如果你是在python 上遇到這個Error則只要在離開iFrame所在頁面後呼叫 這一行WebdriverObject.switch_to_default_content()程式碼,問題便可獲得解決,這意味著把網頁控制權交回給網頁主視窗畫面。

  但現在是在RobotFramework,並不能直接call 副函式來用,所以我得花時間去找可以取代switch_to_default_content()Keyword,最後終於千呼萬喚使出來,我找到了相對於Select FrameKeyword:  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在使用上還是跟寫程式的直覺性有很大的差異壓!

 

20171227日星期三 6:59 PM

arrow
arrow

    jackterrylau 發表在 痞客邦 留言(0) 人氣()