2016-04-05 4 views
0

В настоящее время я использую capybara для выполнения некоторых задач утилизации, а также для тестирования сайта. У меня возникли трудности с загрузкой изображений/файлов с помощью capybara. Во всех документах я нашел только руководства по простым кнопкам, формам, взаимодействию ссылок.Преобразование изображения в base64 с использованием capybara

Был бы очень признателен, если кто-то знает, как загрузить/конвертировать изображения на веб-страницу в формат base64.

+0

Это изначально не поддерживается, но путь может быть EXEC некоторые JS, а затем использовать base64 кодирует его таким образом. Для этого есть довольно хороший смысл, чтобы вы могли извлечь важные бит: https://gist.github.com/HereChen/e173c64090bea2e2fa51 – trh

ответ

0

Просто просмотрел драгоценный камень capybara и нашел метод .render_base64 и save_screenshot, который мог бы сохранить изображение в файле png или jpg, после чего я мог бы обрезать часть, которую я хотел. Метод можно найти здесь: https://github.com/teampoltergeist/poltergeist

1

Этот пример извлекает изображение с веб-страницы с Capybara/Селен:

require 'capybara' 

JS_GET_IMAGE = " 
    var ele = arguments[0], callback = arguments[1], img = new Image(); 
    img.crossOrigin = 'Anonymous'; 
    img.onload = function(){ 
    var cnv = document.createElement('CANVAS'); 
    cnv.width = this.width; 
    cnv.height = this.height; 
    cnv.getContext('2d').drawImage(this, 0, 0); 
    var type = this.src.endsWith('png') ? 'png' : 'jpeg'; 
    callback(cnv.toDataURL('image/' + type).substring(22)); 
    }; 
    var src = ele.src || window.getComputedStyle(ele).backgroundImage; 
    img.src = /https?:/.test(src) ? src.match(/https?:[^\"')]+/)[0] : callback(''); " 


session = Capybara::Session.new(:selenium) 
driver = session.driver.browser 
driver.manage.timeouts.script_timeout = 5000 

# navigate to google 
session.visit "https://www.google.co.uk/" 

# get the logo element 
ele = session.find(:css, '#hplogo img:nth-child(1)') 

# get the logo as base64 string 
imgBase64 = driver.execute_async_script(JS_GET_IMAGE, ele.native) 

# save to a file 
file = File.new("C:\\temp\\image." + (imgBase64[0] == 'i' ? 'png' : 'jpg'), 'wb') 
file.write(Base64.decode64(imgBase64)) 
file.close 
Смежные вопросы