2017-03-14 47 views
3

我在Jenkins Slave上運行一些Selenium測試時遇到問題。具體而言,用於運行測試的顯示分辨率太小,導致一些測試失敗。在Jenkins Slave上爲虛擬機設置Selenium測試的顯示分辨率

要檢查顯示分辨率,我們記錄顯示高度和寬度到控制檯,使用:

driver.manage().window().maximize(); 
System.out.println("Window height: " + driver.manage().window().getSize().getHeight()); 
System.out.println("Window width: " + driver.manage().window().getSize().getWidth()); 

這將返回:

Window height: 784 
Window width: 1040 

這似乎是一個很奇怪的分辨率給我。所需的分辨率爲1920 x 1080.

用作從服務器的服務器是虛擬機(Windows Server 2012 R2)。詹金斯奴隸通過JNLP代理連接。從屬服務以「本地系統」登錄身份運行,並啓用「允許服務與桌面交互」選項。

到目前爲止,我們已經嘗試了一些事情,如:

  • 連接使用RDP和斷開離開會議有希望的顯示分辨率
  • 使用PowerShell設置顯示分辨率開放VM到從
  • 在VM配置中設置默認顯示分辨率
  • 使用硒設置窗口尺寸
  • 和更多...

所有這些都沒有解決問題。建議非常歡迎!

+0

您可以設置顯示大小: 'driver.manage()。window().setSize(new Dimension(1920,1080))' –

+0

@Kishan Patel,在這種情況下不起任何作用。我認爲不可能以這種方式設置大於服務器顯示大小的大小。 – jurgenvo

+0

我現在正在使用ubantu,所以無法真正測試它。但是,我試圖在開始測試之前設置分辨率。將腳本與測試腳本分開。它爲我工作。你可以試試看嗎? http://tools.taubenkorb.at/change-screen-resolution/ –

回答

1

最終設法解決這些問題後,認識到詹金斯並不一定需要運行的奴隸作爲一個Windows服務。要啓動從站,可以從Jenkins下載JNLP代理並將其複製到服務器。運行JNLP文件時,您可以選擇將奴隸代理安裝爲服務的選項。

Jenkins slave agent

之前,我們不得不選擇此選項,這就是爲什麼從被作爲服務運行。在停止和刪除服務之後,我們再次運行了JNLP文件,並確保不選擇該選項。

解決方案建議,包括斷開遠程桌面會話並以大分辨率打開會話時,將從服務器作爲服務運行時不起作用。但是,當以默認方式運行slave時,它們可以工作。

確保遠程桌面會話沒有的一段時間後結束: Session timeout properties

希望這可以幫助別人!

1

根據我對此的經驗,您無法以編程方式解決此問題。您的測試將運行在您物理訪問此虛擬機的顯示器時上次使用的分辨率。例如,如果我在大屏幕顯示器上打開虛擬機並將其最大化,則測試將以該分辨率運行。但是,如果我在筆記本電腦屏幕上打開它並關閉RDP連接,測試將在較小的屏幕上運行。 我知道這聽起來很奇怪,但我真的找不到更好的解決方案。 :D因此,現在我必須小心,在關閉虛擬機之前,在最大的屏幕上最大化VM顯示。您可能會不喜歡這個答案,但是當您發現自己沒有其他解決方案時,請記住它。 ;)

+0

我對此進行了實驗,但沒有幫助。使用RDP登錄到VM並斷開會話。 jenkins slave服務以本地系統用戶身份運行,因此用我自己的用戶連接到虛擬機將不會產生任何影響。即使強制服務以我自己的用戶帳戶運行,它也不會使用RDP會話中的分辨率。 – jurgenvo

+0

好的,我的奴隸在本地用戶帳戶上運行,而不是在本地系統上運行,對不起沒有幫助。 – acikojevic

0

我遇到過同樣的問題。我的seleniumn測試在安裝爲windows服務的jenkins slave下運行,在Windows 7中使用「允許服務與桌面交互」選項的「本地系統」帳戶。由於顯示分辨率不正確,一些測試用例總是失敗。

我登錄到了Windows VM(EXSI Server + VMware Fusion)的控制檯,將分辨率更改爲1400x900,然後重新啓動windwos VM。現在一切正常。