本文引用自repeat - Selenium IDE 的一些心得

 

在玩 Selenium IDE 的時候經常遇到彈出式視窗。

和彈出式視窗搏鬥了許久,做點筆記…

首先是彈出式視窗很容易被 firefox 預設擋下來,然後 Selenium 自然抓不到。 XD

最簡單的解決方式,就是把工具>選項>內容>封鎖彈出型廣告視窗 整個勾掉不要選。

 

再來是抓視窗。抓了很多次都失敗,一開始不知道原因,只知道 Selenium 會有錯誤訊息,偏偏錯誤訊息又是亂碼看不懂。 Google 了很多關鍵字,都沒找到適合的解法。

有天晚上心血來潮,又試著輸入了不同的關鍵字找答案。這次找到的說法依然相同,不過有直接附上 test case 和 test site 。把附的 test case 抓下來試了一次,可以正常抓到視窗。回到抓不到視窗的環境如法炮製,照樣吐錯誤訊息出來。 Orz

由於亂碼訊息本身無法解讀,就從另一端下手。

 

首先把找到的 test case 改成簡單的連結認證,像這樣:

open /index.htm  
click link=link1  
waitForPopUp mywindow 3000
selectWindow name=mywindow  
click link=some example  
pause 10000  
close name=mywindow  

然後把 index.htm 的內容改成 <a href="#" onclick="window.open('example.htm', 'mywindow', 'menubar=no,width=480,height=360,toolbar=no'); return false;">link1</a>

跑了一次可以正常執行,也可以抓到我指定跳出來的 mywindow

再來用同樣的 test case ,不過 index.htm 內容稍微換成 <a href="#" onclick="window.open('http://some.other.example.site/example.htm', 'mywindow', 'menubar=no,width=480,height=360,toolbar=no'); return false;">link1</a> ,再跑一次 test case ,果然也出現了看不懂的亂碼錯誤訊息,大概猜到問題點了,要想辦法證明它。

 

因為錯誤訊息裡有 toString 這個字串,所以大膽假設這個錯誤訊息是其他程式傳給 Selenium 的。

為了證實這個猜想,把 firefox 和所有附加元件、設定檔等等都完整移除,再重新安裝英文版 firefox 。

然後裝回 Selenium IDE ,重跑一次 test case …

那個 toString 的字串和我原本猜的問題一樣:因為安全性考量,不允許 Selenium IDE 跨不同域名存取資料。

找到問題方向以後,要找解法就比較簡單了…

 


Tags: Selenium IDE javascript window.open different domain 跨域名 popup


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 repeat ❤️ 的頭像
    repeat ❤️

    旅行的記憶

    repeat ❤️ 發表在 痞客邦 留言(0) 人氣()