本文引用自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 跨不同域名存取資料。
找到問題方向以後,要找解法就比較簡單了…
留言列表