2009-09-13 66 views
88

我正在使用Selenium RC自動化一些瀏覽器操作,但我希望瀏覽器不可見。這可能嗎?怎麼樣?那麼Selenium Grid呢?我還可以隱藏Selenium RC窗口嗎?Selenium RC中可以隱藏瀏覽器嗎?

+0

中的討論可能不是可以接受的,但是像不能將瀏覽器從屏幕上移開(使用常規的Windows UI自動化? )像把窗口放在(-10000,-10000)? – BrainSlugs83 2014-03-23 04:24:06

+2

由於這個問題現在已經很老了,讓我重定向到一個正確的最新答案[在本頁底部](http://stackoverflow.com/a/23898054/1515819)。 – 2014-10-07 16:04:41

回答

83

有幾個選項:

  • 從而使瀏覽器中打開一個完全不同的機器(或虛擬機),然後就可以通過VNC或遠程桌面連接連接到你可以使用硒網格如果你想看瀏覽器。此外,還有另一種選擇:如果您在該遠程服務器上運行Jenkins前臺進程,它可以在桌面上執行您的測試項目。

  • 你可以在XVFB的Linux上運行Selenium'headless'。我從來沒有嘗試過這樣做,並懷疑這是非常值得的。 http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

  • 您可以將Selenium RC包裝在Windows服務中。 http://support.microsoft.com/kb/137890。除了後來版本的Windows的權限限制可能會阻止Selenium像Windows 2000那樣允許我們訪問桌面。

  • 另一種選擇是使用WebDriver HTMLUnitDriver,它不會啓動「真實」瀏覽器。 http://code.google.com/p/webdriver/。此外還有一個PhantomJS選項以及一個可以使用的「無頭Chrome」。

  • 當然,也可以選擇使用像SauceLabs這樣的服務,在這裏你可以讓你的測試在雲中運行。測試完成後,您可以觀看正在運行的視頻。

+0

這裏是關於創建bat文件來安裝服務的說明: http://brantleytec.blogspot.com/2012/11/selenium-hub-and-node-as-windows-service.html – 2013-04-14 08:11:56

13

Selenium RC的+1作爲Windows服務。

爲了讓測試完全隱藏起來,我認爲如果你在windows上,你沒有太多的解決方案。

我該怎麼做才能使您的局域網中的計算機始終處於聯機狀態並運行硒RC服務器。因此,您使用該計算機的IP而不是本地主機來運行測試。例如:

browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com") 

(考慮到這是運行服務器的計算機的IP地址)。

有了這個設置,你可以在你的計算機上運行你的測試,瀏覽器和RC服務器窗口在另一臺計算機上,一旦完成就返回給你。

4

如果您在Windows上,則有一個選項是在不同的用戶帳戶下運行測試。這意味着瀏覽器和java服務器對您自己的帳戶不可見。

54

在Linux上,您可以在無頭(虛擬)顯示器中運行WebDriver以隱藏瀏覽器。這可以通過Xvfb(X虛擬幀緩衝區)完成。

您可以直接使用xvfbwrapper Python代碼控制的Xvfb: https://github.com/cgoldberg/xvfbwrapper

運行無頭看起來像這樣

Python代碼:

from selenium import webdriver 
from xvfbwrapper import Xvfb 

display = Xvfb() 
display.start() 

# now Firefox will run in a virtual display. 
# you will not see the browser. 
driver = webdriver.Firefox() 
driver.get('http://www.google.com') 

print(driver.title) 
driver.quit() 

display.stop() 

在Debian/Ubuntu的安裝依存關係:

$ sudo apt-get install xvfb 
$ pip install xvfbwrapper 
+2

在Ubuntu上像魔術一樣工作。謝謝你。 – iChux 2014-04-17 08:54:45

+0

很好的解決方案,並感謝您的代碼。 – SuB 2015-08-26 12:34:07

+0

當代碼在虛擬瀏覽器中運行時,我可以在瀏覽器交互腳本運行時繼續正常使用我的電腦嗎? – Mugen 2016-07-06 18:14:19

3

這就是我如何在Linux桌面(Ubuntu)上使用maven運行我的測試。我厭倦了無法使用Firefox的webdriver始終關注焦點。

我安裝xvfb的

xvfb的運行-a MVN乾淨的安裝

完蛋了

+0

這通常是確保xvfb正在運行並由Selenium/WebDriver使用的最簡單方法。 – 2014-12-17 10:12:55

12

在Linux上,你可以在虛擬顯示器上運行測試的瀏覽器。您需要使用xvfb軟件包來創建虛擬X服務器。在基於Debian的發行版,只需運行

sudo apt-get install xvfb 

有一個很好的工具ephemeral-x.sh將可以方便地設置任何命令虛擬顯示上運行。 Download it並使其可執行:

wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh 
chmod +x ephemeral-x.sh 

然後,你可以簡單地使用它來啓動Selenium服務器:由硒創建

./ephemeral-x.sh java -jar selenium-standalone.jar 

所有瀏覽器窗口現在將使用虛擬顯示器,將是不可見的你。

+0

'wget https:// raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh' – pic 2013-05-23 08:45:21

+0

URL更正,謝謝。 – pixelistik 2013-05-23 20:03:32

+0

此腳本有引用問題。如果我說./ephemeral-x.sh foo'*'它說「Running:foo」後跟我的目錄內容。 – 2016-08-29 21:27:44

0

有一個PhantomJS相關項目,名爲GhostDriver,這意味着使用webdriver wire JSON協議在Selenium Grid中運行PhantomJS實例。這可能是你正在尋找的東西,雖然這個問題現在已經4歲了。

17

我很容易設法隱藏瀏覽器窗口。

只是install PhantomJS。然後,改變這一行:

driver = webdriver.Firefox() 

到:

driver = webdriver.PhantomJS() 

你的代碼的其餘部分將不需要改變,沒有瀏覽器將打開。出於調試目的,請在代碼的不同步驟使用driver.save_screenshot('screen.png')

+5

值得一提的是,您必須放置PhantomJs.exe的路徑才能使其工作。例如'driver = webdriver.PhantomJS(r「C:\\ phantomjs \ phantomjs.exe」)' – 2014-06-14 15:58:26

+1

是的,但只在Windows上。 – 2014-06-14 16:10:07

+0

只要可以從環境的$ PATH環境變量中找到,就不需要指定二進制文件的位置。 – 2017-11-10 03:59:51

0

在MacOSX上,我一直無法隱藏瀏覽器窗口,但至少我想出瞭如何將它移動到不同的顯示器上,因此它不會中斷我的工作流程。而Firefox正在運行的測試,只是在碼頭上,選擇選項控制單擊其圖標,並分配到顯示2.

0
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh 
chmod +x ~/ephemeral-x.sh 
~/ephemeral-x.sh TestsStarterCommand 

順便說一句,這是任何開發人員都運行E2E邏輯上將產生的瀏覽器需要一個功能。在開發環境中,處理不斷彈出的窗口以及可能意外地使測試失敗的窗口很煩人。

1

在許多情況下,PhantomJS不會完全滿足您的需求,我想詳細說明Dave Hunt的答案中提到的無頭鍍鉻選項。

chrome 57剛推出此功能。您可以通過ChromeDriver傳遞--headless標誌來使用它,更多信息請參見this question

相關問題