PhantomJS имеет возможность снимать скриншот всей страницы (а не только текущего окна просмотра). Есть ли способ сделать это с помощью Selenium? Я запускаю тесты Огурца/Капибары без головы, используя безголовую жемчужину. Я бы использовал PhantomJS, но у меня были другие проблемы.
Можно ли сделать снимок экрана со всей страницы с помощью Selenium/Capybara?
Ответ 1
Оказывается, я использую метод take_screenshot
, который был предоставлен безголовым самоцветом, когда я мог бы просто использовать метод page.save_screenshot()
, который делает именно то, что мне нужно. Спасибо, Андрей.
Ответ 2
В случае, если кто-нибудь вымыл этот берег в поисках того, как это сделать с Poltergeist, вам просто нужно передать full
аргумент:
page.save_screenshot('screen.png', full: true) # If providing a custom file name.
page.save_screenshot(full: true) # Capybara sets a name based on timestamp.
page.save_and_open_screenshot('screen.png', full: true) # Same as save_screenshot.
page.save_and_open_screenshot(full: true) # Same as save_screenshot.
Надеюсь, поможет!
Ответ 3
Вы также можете сделать что-то вроде этого:
After do |scenario|
take_screenshot(@browser, scenario)
end
def take_screenshot(browser, scenario)
if scenario.failed?
scenario_name = scenario.name.gsub /[^\w\-]/, ' '
time = Time.now.strftime("%Y-%m-%d %H%M")
screenshot_path = './failed_png/' + time + ' - ' + scenario_name + '.png'
else
scenario_name = scenario.name.gsub /[^\w\-]/, ' '
time = Time.now.strftime("%Y-%m-%d %H%M")
screenshot_path = './success_png/' + time + ' - ' + scenario_name + '.png'
end
browser.save_screenshot(screenshot_path)
end
Если вы создадите папку failed_png и success_png, этот код сделает снимок экрана для каждого успеха и неудачи и поместит его в соответствующие папки с меткой времени. Этот код входит в ваш файл env.rb и делает его таким, что вам не нужно использовать какие-либо помощники или добавлять дополнительный код в ваш пароль.
Ответ 4
Я много чего перепробовал, работая с Capybara/Selenium на полную высоту.
Казалось, сработала только одна вещь, и она использовала headless_chrome. Помните, что я использую цикл, чтобы делать скриншоты различной ширины:
def screenshot
driver = Capybara.current_session.driver
window = Capybara.current_session.driver.browser.manage.window
widths = [320, 1380] #leave normal w as last
widths.each do |w|
window.resize_to(w, 900)
total_width = driver.execute_script("return document.body.offsetWidth")
total_height = driver.execute_script("return document.body.scrollHeight")
window.resize_to(total_width, total_height)
save_screenshot
end
end
Я изменяю размер дважды, чтобы получить информацию о высоте.
rails_helper.rb:
Capybara.register_driver :headless_chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
chromeOptions: {
"args" => %w{
headless
disable-gpu
--disable-notifications
}
}
)
Capybara::Selenium::Driver.new app,
browser: :chrome,
desired_capabilities: capabilities
end
Capybara.javascript_driver = :headless_chrome
Capybara.current_driver = :headless_chrome