2013-04-23 71 views
92

私は多くのテストを実行するセレンテストスイートを持っています。新しいテストごとに、開いている他のウィンドウの上にブラウザウィンドウを開きます。地元の環境で働いている間に非常にびっくりします。バックグラウンドでウィンドウを開くようセレンやOS(MAC)に指示する方法はありますか?Selenium Webdriverはバックグラウンドでブラウザウィンドウをサイレントモードで開くことができますか?

+0

にあなたにこの程度の情報の少しを追加あなたは今私のために働いているPythonで1例

from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("headless") self.driver = webdriver.Chrome(executable_path='/Users/${userName}/Drivers/chromedriver', chrome_options=options) 

を表示ドライバ= webdriver。あなたのコードでFirefox() 'を実行してください。私の答えはここにあります:http://stackoverflow.com/a/23898148/1515819 –

答えて

47

いくつかの方法がありますが、単純な「設定値を設定する」ではありません。あなたはすべての人の要件に適合しないヘッドレスブラウザに投資されない限り、それはハックの少しです:

How to hide Firefox window (Selenium WebDriver)?

Is it possible to hide the browser in Selenium RC?

することができます「たぶん」、 --no-startup-window

いくつかのブラウザ、特にIEでは、テストに重点を置かないようにテストを傷つけることに注意してください。

また、AutoITで少しでもハックして、開いたウィンドウを非表示にすることもできます。 Windows上で

+0

" - no-startup-window "は非推奨になりました –

4

あなたがwin32gui使用することができます。

import win32gui 
import subprocess 

class HideFox: 
    def __init__(self, exe='firefox.exe'): 
     self.exe = exe 
     self.get_hwnd() 


    def get_hwnd(self): 
     win_name = get_win_name(self.exe) 
     self.hwnd = win32gui.FindWindow(0,win_name) 


    def hide(self): 
     win32gui.ShowWindow(self.hwnd, 6) 
     win32gui.ShowWindow(self.hwnd, 0) 

    def show(self): 
     win32gui.ShowWindow(self.hwnd, 5) 
     win32gui.ShowWindow(self.hwnd, 3) 

def get_win_name(exe): 
    '''simple function that gets the window name of the process with the given name''' 
    info = subprocess.STARTUPINFO() 
    info.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    raw=subprocess.check_output('tasklist /v /fo csv', startupinfo=info).split('\n')[1:-1] 
    for proc in raw: 
     try: 
      proc=eval('['+proc+']') 
      if proc[0]==exe: 
       return proc[8]    
     except: 
      pass 
    raise ValueError('Could not find a process with name '+exe) 

例:

hider=HideFox('firefox.exe') #can be anything, eq: phantomjs.exe, notepad.exe ... 
#To hide the window 
hider.hide() 
#To show again 
hider.show() 

しかし、この解決策の一つの問題がある - send_keysメソッドを使用して、ウィンドウショーアップになります。あなたは、ウィンドウを表示しませんJavaScriptを使用して、それに対処することができます

def send_keys_without_opening_window(id_of_the_element, keys) 
    YourWebdriver.execute_script("document.getElementById('" +id_of_the_element+"').value = '"+keys+"';") 
0

を* nixの上で、あなたはまた、XvfbのようにヘッドレスのXサーバを実行し、それにDISPLAY変数を指すことができます:

Fake X server for testing?

97

PythonでSelenium Webドライバを使用している場合は、XvfbとXephyrのPythonラッパーPyVirtualDisplayを使用できます。

PyVirtualDisplayはXvfbを依存関係として必要とします。 Ubuntuでは、最初のXvfbのをインストールします。

sudo apt-get install xvfb 

を、その後は、PyPIからPyVirtualDisplayをインストール:Pythonで

pip install pyvirtualdisplay 

サンプルセレンスクリプトをヘッドレスモードでPyVirtualDisplayで:

#!/usr/bin/env python 

from pyvirtualdisplay import Display 
from selenium import webdriver 

display = Display(visible=0, size=(800, 600)) 
display.start() 

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

display.stop() 

EDIT 最初の回答は2014年に掲載されましたが、今は2018年の終わりです。他のすべてのブラウザと同様に、また進んだ。 Chromeには完全なヘッドレスバージョンが用意されているため、UIウィンドウを非表示にするためにサードパーティのライブラリを使用する必要はありません。次のようにサンプル・コードは次のとおりです。

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 

CHROME_PATH = '/usr/bin/google-chrome' 
CHROMEDRIVER_PATH = '/usr/bin/chromedriver' 
WINDOW_SIZE = "1920,1080" 

chrome_options = Options() 
chrome_options.add_argument("--headless") 
chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE) 
chrome_options.binary_location = CHROME_PATH 

driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, 
          chrome_options=chrome_options 
         ) 
driver.get("https://www.google.com") 
driver.get_screenshot_as_file("capture.png") 
driver.close() 
+0

美しく清潔な解決策です。ありがとうございました。魅力のように動作します。もう一度+ 1sを得なければならない – Eldamir

+7

Mac OSXで利用できますか? – vanguard69

+0

これはUbuntuを使用していて、テストスイートがPythonになっている場合に便利です – kevzettler

7

私はあなたが私の知る限りPhantomJSは、Firefoxでのみ動作します知っているようにPhantom Official Website

を訪問する必要があります詳細はファントムのJs を使用することをお勧め..

PhantomJs.exeをダウンロードした後、下の図のようにプロジェクトにインポートする必要があります。 >>天秤座RY >>phantomjs.exe enter image description here

は今、あなたはあなたのセレンコードの内部に持っているすべては

import os 
path2phantom = os.getcwd() + "\common\Library\phantomjs.exe" 
browser = webdriver.PhantomJS(path2phantom) 

のようなものへのパスをライン

browser = webdriver.Firefox() 

を変更することですあなたは好きなように変更することができます:)

それは、それは私のために働いた。そして間違いなく、彼はあなたがするために動作しますが、ここで乾杯

+0

このリンクから質問に答えることができますが、ここに答えて、参考のためのリンクを提供してください。リンクされたページが変更された場合、リンクのみの回答は無効になる可能性があります。 – slfan

0

が私のために働いた.NETソリューションです:

ダウンロードPhantomJsここhttp://phantomjs.org/download.html

は、ダウンロードしてペーストにbinフォルダから.exeファイルをコピーします。 Visual Studioプロジェクトのbinデバッグ/リリースフォルダに保存します。

PhantomJSDriver driver = new PhantomJSDriver(); 
using (driver) 
{ 
    driver.Navigate().GoToUrl("http://testing-ground.scraping.pro/login"); 
    //your code here 
} 
15

クローム57は窓が見えなくなります--headlessフラグを渡すオプションがあります:

は次のようにドライバーを開き、あなたのコードでは

using OpenQA.Selenium.PhantomJS; 

を使用して、これを追加します。

このフラグは--no-startup-windowとは異なり、最後のウィンドウは起動しません。それは、this pageさんのように、バックグラウンドアプリのホスティングに使用されます。あなたはヘッドレスモードで実行することができ、任意のブラウザなしで実行するための

ChromeOptions options = new ChromeOptions(); 
options.addArguments("--headless"); 
ChromeDriver chromeDriver = new ChromeDriver(options); 
+0

VBA言語で同じことが可能かどうか知っていますか? – Martin

+0

@Martinあなたの問題がすでに解決されているかどうかはわかりませんが、すばやく検索した後、私はそれらを見つけました:https://github.com/prajaktamoghe/selenium-vba/issues/33 https:// stackoverflow .com/questions/45121955/how-can-i-use-chrome-options-vba-with-selenium これはあなたを助けますか? – in016hoe

関連する問題