2012-01-17 9 views
37

Quando si acquisisce uno screenshot con Selenium Webdriver su Windows con Python, lo screenshot viene salvato direttamente nel percorso del programma, c'è un modo per salvare il file .png in una directory specifica?Screenshot Webdriver

risposta

53

Usa driver.save_screenshot('/path/to/file') o driver.get_screenshot_as_file('/path/to/file'):

import selenium.webdriver as webdriver 
import contextlib 

@contextlib.contextmanager 
def quitting(thing): 
    yield thing 
    thing.quit() 

with quitting(webdriver.Firefox()) as driver: 
    driver.implicitly_wait(10) 
    driver.get('http://www.google.com') 
    driver.get_screenshot_as_file('/tmp/google.png') 
    # driver.save_screenshot('/tmp/google.png') 
-6

Capisco siete alla ricerca di una risposta in pitone, ma qui è come si potrebbe farlo in rubino ..

http://watirwebdriver.com/screenshots/

Se questo funziona solo salvando solo nella directory corrente. Prima assegnerei l'immagine a una variabile e quindi salvarla su disco come file PNG.

esempio:

image = b.screenshot.png 

File.open("testfile.png", "w") do |file| 
    file.puts "#{image}" 
end 

dove b è la variabile del browser usato da WebDriver. Ho la flessibilità di fornire un percorso assoluto o relativo in "File.open" così posso salvare l'immagine ovunque.

7

Sì, abbiamo un modo per ottenere l'estensione screenshot del .png usando python WebDriver

uso sottostante Codice se si lavora in pitone webriver.it è molto semplice.

driver.save_screenshot('D\folder\filename.png') 
17

Ispirato da questa discussione (stessa domanda per Java): Take a screenshot with Selenium WebDriver

from selenium import webdriver 

browser = webdriver.Firefox() 
browser.get('http://www.google.com/') 
browser.save_screenshot('screenie.png') 
browser.quit() 
3

Certo che non è vero e proprio in questo momento, ma ho affrontato questo problema anche e il mio modo: Sembra 'save_screenshot' avere qualche problema con la creazione di file con spazio nel nome stesso tempo in cui ho aggiunto la randomizzazione ai nomi di file per eseguire l'override di escape.

Qui ho avuto modo di pulire il mio nome di spazi bianchi (How do I replace whitespaces with underscore and vice versa?):

def urlify(self, s): 
    # Remove all non-word characters (everything except numbers and letters) 
    s = re.sub(r"[^\w\s]", '', s) 
    # Replace all runs of whitespace with a single dash 
    s = re.sub(r"\s+", '-', s) 
    return s 

poi

driver.save_screenshot('c:\\pytest_screenshots\\%s' % screen_name) 

dove

def datetime_now(prefix): 
    symbols = str(datetime.datetime.now()) 
    return prefix + "-" + "".join(symbols) 

screen_name = self.urlify(datetime_now('screen')) + '.png' 
1
driver.save_screenshot("path to save \\screen.jpeg") 
0

È possibile utilizzare sotto la funzione per parente percorso come percorso assoluto non è una buona idea aggiungere nello script

Import

import sys, os 

Usa codice, come di seguito:

ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) 
screenshotpath = os.path.join(os.path.sep, ROOT_DIR,'Screenshots'+ os.sep) 
driver.get_screenshot_as_file(screenshotpath+"testPngFunction.png") 

assicurarsi che si crea la cartella in cui è presente il file .py .

os.path.join impediscono inoltre di eseguire lo script in multipiattaforma come: UNIX e Windows. Genererà il separatore di percorso come da sistema operativo in fase di esecuzione. os.sep è simile a File.separtor in java