線上書籍

Home

Selenium

繼續前一篇的問題,為什麼Selenium RC中的Selenium Server需要以這種代理服務器的形式存在?其實,這和瀏覽器的「同源策略」(The Same Origin Policy)有關。

一.什麼是同源策略

    同源策略,它是由Netscape提出的一個著名的安全策略,現在所有的可支持javascript的瀏覽器都會使用這個策略。

為什麼需要同源策略,這裡舉個例子:
    假設現在沒有同源策略,會發生什麼事情呢?大家知道,JavaScript可以做很多東西,比如:讀取/修改網頁中某個值。恩,你現在打開了瀏覽器,在一 個tab窗口中打開了銀行網站,在另外一個tab窗口中打開了一個惡意網站,而那個惡意網站掛了一個的專門修改銀行信息的JavaScript,當你訪問 這個惡意網站並且執行它JavaScript時,你的銀行頁面就會被這個JavaScript修改,後果會非常嚴重!而同源策略就為了防止這種事情發生, 看下圖:

比如說,瀏覽器的兩個tab頁中分別打開了http://www.baidu.com/index.html和http://www.google.com/index.html,其中,JavaScript1和JavaScript3是屬於百度的腳本,而JavaScript2是屬於谷歌的腳本,當瀏覽器的tab1要運行一個腳本時,便會進行同源檢查,只有和www.baidu.com同源的腳本才能被執行,所謂同源,就是指域名、協議、端口相同。所以,tab1只能執行JavaScript1和JavaScript3腳本,而JavaScript2不能執行,從而防止其他網頁對本網頁的非法篡改。


二.Selenium Server為什麼以這種代理服務器的形式存在

    上面說了同源策略,那同源策略的Selenium Server有什麼關係呢??呵呵,上一篇說過,Selenium Core是一堆JS函數的集合,它是我們操作瀏覽器的基礎。當存在同源策略時,便出現一些問題,看下圖:

因為Selenium Core的JS腳本的「源」是localhost,所以瀏覽器會阻止Selenium Core的JS腳本在測試頁面上執行,這就是為什麼在本系列第一篇中說,如果只使用Selenium Core進行測試,需要把Selenium Core安裝到遠程服務器上。

    為瞭解決上面這個問題,Selenium RC中的Selenium Server就以代理服務器的形式出現了,下圖說明它是如何借助代理的身份矇騙瀏覽器的:>

Selenium Server以代理的形式存在,通過修改WebSite的源信息,從而達到欺騙瀏覽器的目的,就這樣,Selenium RC就輕鬆繞過了同源策略。在上圖中,瀏覽器會認為WebSite和Selenium Core來自同一個「源」----代理服務器!