2015-01-14 2 views
4

Я искал решение для тестирования безглавых в osx. Но мне нужна возможность сохранять файлы, возвращенные сервером.Безгласное тестирование браузера с возможностью загрузки?

Я тестировал селен, фантомсы, casperjs и изучал все, что мог найти в Интернете.

ни одна из них не поддерживает загрузку. я что-то упускаю? существуют ли какие-либо безглавые рамки браузера/тестирования, которые поддерживают загрузку?

+0

CasperJS имеет функцию 'download', поэтому она поддерживает загрузку. PhantomJS поддерживает загрузку, потому что CasperJS построен поверх нее. В чем проблема, с которой вы сталкиваетесь? –

+0

@ArtjomB. что вы подразумеваете под функцией загрузки? файл является результатом сообщения http, поэтому он отправляется как Content-Disposition: attachment; filename = FILENAME в заголовке – Mars

+0

Да, это правда, что PhantomJS не сохраняет файл, когда он получает такой запрос, но этот файл может быть [загружен] (http://docs.casperjs.org/en/ last/modules/casper.html # download) такой случай из [соответствующего обработчика событий] (http://docs.casperjs.org/en/latest/events-filters.html#resource-received). –

ответ

4

Что вы можете сделать, это:

  • начать виртуальный дисплей (см Xvfb)
  • запустить Firefox браузер с предпочтениями настроен на автоматически сохраняет csv файлов

Работа пример в питона с дополнительными комментариями (с помощью pyvirtualdisplayxvfb обертку):

from os import getcwd 
import time 

from pyvirtualdisplay import Display 
from selenium import webdriver 

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

# configure firefox profile to automatically save csv files in the current directory 
fp = webdriver.FirefoxProfile() 
fp.set_preference("browser.download.folderList", 2) 
fp.set_preference("browser.download.manager.showWhenStarting", False) 
fp.set_preference("browser.download.dir", getcwd()) 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv") 

browser = webdriver.Firefox(firefox_profile=fp) 
browser.get('http://www.nationale-loterij.be/nl/onze-spelen/lotto/resultaten') 

# check the option 
browser.find_element_by_id('corporatebody_3_corporategrid93961a8f9b424ed6bd0697df356d9483_1_rblType_0').click() 

# click the link 
browser.find_element_by_name('corporatebody_3$corporategrid93961a8f9b424ed6bd0697df356d9483_1$btnDownload').click() 

# hardcoded delay for waiting a file download (better check for the downloaded file to appear on the disk) 
time.sleep(2) 

# quit the browser 
browser.quit() 

# stop the display 
display.stop() 

Смотрите также:

+0

это действительно загружает файл, но он по-прежнему показывает фреймворк firefox, так что это может сработать, но на самом деле он не безголовый. или он должен показывать firefox? – Mars

+0

@Mars Я подозреваю, что это потому, что у вас есть реальный дисплей, а из-за него виртуальный не используется. – alecxe

+0

Хорошее решение, но когда я пытаюсь выполнить '' 'clear()' '' на элементе ввода, я получаю исключение селена '' 'Элемент в настоящее время не взаимодействует и его нельзя манипулировать'''. Кажется странным, если вы можете '' 'click()' '' элементы, но не '' 'clear()' '' им. –

1

Я использую команду OSX selenium + wget для выполнения загрузки.

Здесь приведен пример кода:

new_driver = webdriver.Firefox() 
new_driver.get(url) 
for element in new_driver.find_elements_by_tag_name('img'): 
    os.system('wget ' + element.get_attribute('src').rstrip('\n')) 
+2

Я не могу сделать wget, потому что файл находится внутри заголовка сообщения как Content-Disposition: attachment; filename = FILENAME – Mars

+0

@Mars вы не разделяете URL-адрес и код, над которым работаете? – aberna

+0

@abema вот URL-адрес Я работаю над http://www.nationale-loterij.be/nl/onze-spelen/lotto/resultaten, нажав на первый маркер и нажав кнопку скачать ... – Mars

0

Awesomium - браузер без браузера, и у него есть менеджер загрузок с обработчиками событий загрузки. Here - ссылка для документации.

Смежные вопросы