你無需了解一切細節(jié)
很少有開發(fā)人員精通各種語言和技術。因此,我們的架構需要幫助開發(fā)人員把他們的才華用于擅長的地方,而無需處理不適合他們的代碼片段。
降低巴士因素
在軟件開發(fā)領域存在一種(非正式的)概念,稱為“巴士因素”。它指的是關鍵開發(fā)人員的數量,如果這些人遇到不幸——被大巴撞傷而離開項目,那 么項目無法繼續(xù)進行。像瀏覽器自動化這樣復雜的技術特別能夠證明巴士因素的重要性,因此我們的許多架構決策都希望能夠盡可能提高關鍵開發(fā)人員的數量。
偏愛Javascript實現
WebDiver在沒有其他方式控制瀏覽器的情況下會使用純Javascript驅動瀏覽器。這意味著我們添加的所有API都應該傾向于偏愛 Javascript實現。舉一個具體的例子,HTML5引入了LocalStorage,這是在客戶端存儲結構化數據的API。它通常在瀏覽器中使用 SQLite實現。比較自然的實現方式是使用類似JDBC的技術為底層的數據存儲提供數據庫連接。終,我們決定采用底層Javascript實現的 API,因為通常數據庫訪問API與Javascript實現不太兼容。
所有方法調用都是RPC調用
WebDriver控制運行在其它進程中的瀏覽器。一個很容易忽視的事實是,這意味著所有API調用都是RPC調用,因此框架的性能在于網絡延遲 上。在正常操作中,這未必明顯——大多數操作系統(tǒng)優(yōu)化了到本機(localhost)的路由——但是隨著瀏覽器和測試代碼之間的網絡延遲增加,對于 API設計者和使用者來說,原本高效的調用會惡化。
這種情況給API的設計帶來了一定壓力。功能粗糙的較大規(guī)模的API可能會通過合并多個調用幫助減低延遲,但是這需要掌握平衡,時刻保持API的 可讀性和易用性。例如,有時候需要檢測某個元素是不是對終用戶可見。我們不僅需要考慮各種CSS屬性(可能需要通過查看父元素來推斷),也應該檢查元素 的尺寸。低限度情況下,API應該分別執(zhí)行所有這些檢測。WebDriver把這些功能都合并到一個方法isDisplayed中。
這是開源項目
雖然嚴格意義上說,這不是一種架構觀點,但還是要強調Selenium是一個開源項目。上面提到的所有觀點聯(lián)系在一起,表達的意思是:我們希望盡 可能的幫助新的開發(fā)人員易于參與項目。降低參與門檻的措施包括盡可能使所需知識淺顯、使用的語言種類較少、依賴自動化測試驗證。
初該項目被劃分成一系列模塊,每一個模塊代表了一種特定的瀏覽器,其他的模塊是通用代碼和支持代碼。每一個綁定的代碼樹保存在這些模塊下面。這 種方法對于類似Java和C#的語言來說非常有用,但是對于Ruby和Python的開發(fā)人員來說很痛苦。這種情況直接導致了有限的參與者,只有一小部 分人參與Python和Ruby的綁定工作。為了解決這個問題,在2010年的十月和十一月,項目源代碼被重新組織,Ruby和Python代碼存放在每 種語言的獨立文件夾中。這種方式符合開源開發(fā)人員的期望,立刻吸引了社區(qū)的廣泛參與。