Selenium 2.0的由來(lái)及設(shè)計(jì)架構(gòu)(一)
就在Selenium1.0處于開(kāi)發(fā)階段的同時(shí),另一款瀏覽器自動(dòng)化框架WebDriver也正在ThoughtWorks公司的醞釀之中。WebDriver項(xiàng)目的初衷是把端對(duì)端測(cè)試與底層測(cè)試工具隔離開(kāi)。通常情況下,這種隔離手段通過(guò)適配器(Adapter)模式完成。WebDriver正是來(lái)源于該方法在許多項(xiàng)目上的不斷實(shí)踐應(yīng)用,最初是HtmlUnit的封裝,工具發(fā)布后很快開(kāi)始支持Internet Explorer和Firefox。WebDriver的最初代碼在2007年初發(fā)布。
在WebDriver最初發(fā)布時(shí),與Selenium RC存在顯著差異,盡管它們都屬于瀏覽器自動(dòng)化的API工具。對(duì)于用戶(hù)來(lái)說(shuō),最明顯的區(qū)別在于Selenium RC提供基于字典的API,所有方法都在一個(gè)類(lèi)中開(kāi)放,而WebDriver的API更面向?qū)ο蟆4送猓琖ebDriver僅支持Java,而Selenium RC提供廣泛的語(yǔ)言支持。技術(shù)差異也很明顯:Selenium Core(RC的基礎(chǔ))基本上是JavaScript應(yīng)用,運(yùn)行在瀏覽器的安全沙箱之內(nèi)。WebDriver則嘗試原生綁定到瀏覽器中,繞開(kāi)了瀏覽器的安全模型,代價(jià)就是框架自身的開(kāi)發(fā)投入顯著增加。
在2009年8月,兩個(gè)項(xiàng)目宣布合并,Selenium WebDriver就是合并的成果。
WebDriver的創(chuàng)建者Simon Stewart早在2009年8月的一份郵件中解釋了項(xiàng)目合并的原因:
為何把兩個(gè)項(xiàng)目合并?部分原因是WebDriver解決了Selenium存在的缺點(diǎn)(比如,能夠繞過(guò)JS沙箱。我們有出色的API),部分原因是Selenium解決了WebDriver存在的問(wèn)題(例如支持廣泛的瀏覽器),部分原因是因?yàn)镾elenium的主要貢獻(xiàn)者和我都覺(jué)得合并項(xiàng)目是為用戶(hù)提供最優(yōu)秀框架的最佳途徑。
目前,WebDriver支持的語(yǔ)言綁定包括Java、C#、Python和Ruby。它支持Chrome、Firefox、Opera和移動(dòng)端Android、iPhone瀏覽器。此外,還有其他關(guān)聯(lián)項(xiàng)目,不在同一源代碼庫(kù)中維護(hù),但是和主項(xiàng)目(Selenium WebDriver)緊密合作,例如提供Perl綁定支持、BlackBerry瀏覽器支持,以及“無(wú)頭”WebKit——用于持續(xù)集成的測(cè)試其無(wú)法正常顯示的情況。最初的Selenium RC機(jī)制仍然維持,幫助WebDriver在瀏覽器不受支持的情況下提供支持。
在兩個(gè)項(xiàng)目合并中出現(xiàn)了哪些架構(gòu)方面的問(wèn)題?學(xué)到了哪些經(jīng)驗(yàn)和教訓(xùn)?Simon Stewart在《The Architecture of Open Source Applications》一文中做了詳細(xì)的描述,本文參考了以下內(nèi)容:
http://www.aosabook.org/en/selenium.html
http://www.infoq.com/cn/news/2011/07/selenium-arch-2
處理復(fù)雜性
軟件是模塊構(gòu)造起來(lái)的。這些模塊很復(fù)雜,作為API的設(shè)計(jì)人員們,可以選擇如何處理這種復(fù)雜性。極端情況下,可能會(huì)傳播這種復(fù)雜性,這意味著API的每一位用戶(hù)都需要牽涉其中。另一個(gè)極端情況是承擔(dān)盡可能多的復(fù)雜性并將其隔離在某個(gè)地方。這個(gè)地方對(duì)于許多想一探究竟的API用戶(hù)來(lái)說(shuō)黑暗而恐怖。折中方案則是API的用戶(hù),如果無(wú)須深入了解實(shí)現(xiàn)細(xì)節(jié),那么只需面對(duì)當(dāng)前所遇到的復(fù)雜性即可。
就在Selenium1.0處于開(kāi)發(fā)階段的同時(shí),另一款瀏覽器自動(dòng)化框架WebDriver也正在ThoughtWorks公司的醞釀之中。WebDriver項(xiàng)目的初衷是把端對(duì)端測(cè)試與底層測(cè)試工具隔離開(kāi)。通常情況下,這種隔離手段通過(guò)適配器(Adapter)模式完成。WebDriver正是來(lái)源于該方法在許多項(xiàng)目上的不斷實(shí)踐應(yīng)用,最初是HtmlUnit的封裝,工具發(fā)布后很快開(kāi)始支持Internet Explorer和Firefox。WebDriver的最初代碼在2007年初發(fā)布。
在WebDriver最初發(fā)布時(shí),與Selenium RC存在顯著差異,盡管它們都屬于瀏覽器自動(dòng)化的API工具。對(duì)于用戶(hù)來(lái)說(shuō),最明顯的區(qū)別在于Selenium RC提供基于字典的API,所有方法都在一個(gè)類(lèi)中開(kāi)放,而WebDriver的API更面向?qū)ο蟆4送猓琖ebDriver僅支持Java,而Selenium RC提供廣泛的語(yǔ)言支持。技術(shù)差異也很明顯:Selenium Core(RC的基礎(chǔ))基本上是JavaScript應(yīng)用,運(yùn)行在瀏覽器的安全沙箱之內(nèi)。WebDriver則嘗試原生綁定到瀏覽器中,繞開(kāi)了瀏覽器的安全模型,代價(jià)就是框架自身的開(kāi)發(fā)投入顯著增加。
在2009年8月,兩個(gè)項(xiàng)目宣布合并,Selenium WebDriver就是合并的成果。
WebDriver的創(chuàng)建者Simon Stewart早在2009年8月的一份郵件中解釋了項(xiàng)目合并的原因:
為何把兩個(gè)項(xiàng)目合并?部分原因是WebDriver解決了Selenium存在的缺點(diǎn)(比如,能夠繞過(guò)JS沙箱。我們有出色的API),部分原因是Selenium解決了WebDriver存在的問(wèn)題(例如支持廣泛的瀏覽器),部分原因是因?yàn)镾elenium的主要貢獻(xiàn)者和我都覺(jué)得合并項(xiàng)目是為用戶(hù)提供最優(yōu)秀框架的最佳途徑。
目前,WebDriver支持的語(yǔ)言綁定包括Java、C#、Python和Ruby。它支持Chrome、Firefox、Opera和移動(dòng)端Android、iPhone瀏覽器。此外,還有其他關(guān)聯(lián)項(xiàng)目,不在同一源代碼庫(kù)中維護(hù),但是和主項(xiàng)目(Selenium WebDriver)緊密合作,例如提供Perl綁定支持、BlackBerry瀏覽器支持,以及“無(wú)頭”WebKit——用于持續(xù)集成的測(cè)試其無(wú)法正常顯示的情況。最初的Selenium RC機(jī)制仍然維持,幫助WebDriver在瀏覽器不受支持的情況下提供支持。
在兩個(gè)項(xiàng)目合并中出現(xiàn)了哪些架構(gòu)方面的問(wèn)題?學(xué)到了哪些經(jīng)驗(yàn)和教訓(xùn)?Simon Stewart在《The Architecture of Open Source Applications》一文中做了詳細(xì)的描述,本文參考了以下內(nèi)容:
http://www.aosabook.org/en/selenium.html
http://www.infoq.com/cn/news/2011/07/selenium-arch-2
處理復(fù)雜性
軟件是模塊構(gòu)造起來(lái)的。這些模塊很復(fù)雜,作為API的設(shè)計(jì)人員們,可以選擇如何處理這種復(fù)雜性。極端情況下,可能會(huì)傳播這種復(fù)雜性,這意味著API的每一位用戶(hù)都需要牽涉其中。另一個(gè)極端情況是承擔(dān)盡可能多的復(fù)雜性并將其隔離在某個(gè)地方。這個(gè)地方對(duì)于許多想一探究竟的API用戶(hù)來(lái)說(shuō)黑暗而恐怖。折中方案則是API的用戶(hù),如果無(wú)須深入了解實(shí)現(xiàn)細(xì)節(jié),那么只需面對(duì)當(dāng)前所遇到的復(fù)雜性即可。
posted on 2013-12-04 11:21 順其自然EVO 閱讀(317) 評(píng)論(0) 編輯 收藏