問題
在一般的使用場(chǎng)景下荣月,使用selenium進(jìn)行web自動(dòng)化測(cè)試都需要打開一個(gè)瀏覽器的實(shí)體,測(cè)試腳本通過控制webdriver來(lái)對(duì)瀏覽器進(jìn)行操作。但是在一些場(chǎng)景下測(cè)試工程師需要在不打開瀏覽器的情況下進(jìn)行自動(dòng)化測(cè)試,也就是以headless的方式運(yùn)行自動(dòng)化測(cè)試敏释。
解決方法
業(yè)界有一些headless的第三方庫(kù)可以使用,例如大名鼎鼎的PhantomJS摸袁。但是這些工具的安裝很復(fù)雜颂暇,同時(shí)不一定保證持續(xù)的維護(hù)。
現(xiàn)在全球最受歡迎的瀏覽器Chrome在Chrome 59 (Chrome 60 for Windows)版本中已經(jīng)支持了headless mode但惶,只需要配置一些簡(jiǎn)單的參數(shù)就可以實(shí)現(xiàn)。
實(shí)例
首先要確認(rèn)自己機(jī)子上的Chrome版本湿蛔。
require 'selenium-webdriver'
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--remote-debugging-port=9222')
driver = Selenium::WebDriver.for :chrome, options: options
driver.get "https://www.jd.com"
driver.save_screenshot("#{File.dirname(__FILE__)}/#{Time.now.strftime("%F")}")
通過在Selenium::WebDriver::Chrome::Options
類的對(duì)象中添加argument options.add_argument('--headless')
膀曾,可以讓我們?cè)贑hrome在headless模式下運(yùn)行。
而第二個(gè)argument的作用是針對(duì)現(xiàn)有bug的work around阳啥。第三個(gè)argument的作用則是允許我們可以在另外一個(gè)瀏覽器中debug添谊。
為了觀測(cè)運(yùn)行的情況,我保存了一個(gè)屏幕截圖察迟。
總結(jié)
相比于之前的headless web自動(dòng)化方案斩狱,Chrome的優(yōu)勢(shì)在于設(shè)置的方便,甚至可以和當(dāng)前的框架無(wú)縫切換扎瓶,同時(shí)Chrome作為最為主流的瀏覽器所踊,你也不用擔(dān)心持續(xù)維護(hù)的問題。