SeleniumRC
早期的Selenium使用的是JavaScript注入技術(shù)與瀏覽器打交道诈乒,需要SeleniumRC啟動(dòng)一個(gè)Server戏羽,將操作Web元素的API調(diào)用轉(zhuǎn)化為一段段javascript,在Selenium內(nèi)核啟動(dòng)瀏覽器之后注入這段Javascript狱掂。開發(fā)過Web應(yīng)用的人都知道演痒,Javascript可以獲取并調(diào)用頁面的任何元素,自如的進(jìn)行操作趋惨。由此才實(shí)現(xiàn)了Selenium的目的:自動(dòng)化Web操作鸟顺。這種Javascript注入技術(shù)的缺點(diǎn)是速度不理想,而且穩(wěn)定性大大依賴于Selenium內(nèi)核對(duì)API翻譯成的Javascript質(zhì)量高低器虾。
WebDriver
當(dāng)Selenium2.x提出了WebDriver的概念之后讯嫂,它提供了完全另外的一種方式與瀏覽器交互。那就是利用瀏覽器原生的API兆沙,封裝成一套更加面向?qū)ο蟮腟eleniumWebDriverAPI欧芽,直接操作瀏覽器頁面里的元素,甚至操作瀏覽器本身(截屏葛圃,窗口大小千扔,啟動(dòng),關(guān)閉库正,安裝插件曲楚,配置證書之類的)。由于使用的是瀏覽器原生的API褥符,速度大大提高龙誊,而且調(diào)用的穩(wěn)定性交給了瀏覽器廠商本身,顯然是更加科學(xué)喷楣。然而帶來的一些副作用就是趟大,不同的瀏覽器廠商,對(duì)Web元素的操作和呈現(xiàn)多少會(huì)有一些差異抡蛙,這就直接導(dǎo)致了SeleniumWebDriver要分瀏覽器廠商不同护昧,而提供不同的實(shí)現(xiàn)魂迄。例如Firefox就有專門的FirefoxDriver粗截,Chrome就有專門的ChromeDriver等等。(甚至包括了AndroidDriver和iOSWebDriver)
引用一句個(gè)人贊同的原文:如果你使用的是WebDriver捣炬,你就可以直接拋棄SeleniumServer熊昌。因?yàn)槟愀静恍枰獑?dòng)一個(gè)服務(wù)器來處理瀏覽器交互绽榛。