#r #shiny
#r #блестящий
Вопрос:
Я пишу виньетку для своего пакета приложений Shiny. В начале моей виньетки я создаю файл с именем screenshots.R
, который создает красивые скриншоты моего приложения. Я создаю их следующим образом:
webshot::appshot(mypackage::run_datepicker_app(),
file = "man/figures/datepicker.png", vwidth = 500, vheight = 200)
Это отлично работает и дает мне отличный скриншот того, что представляет собой — в данном случае — пару dateInput
полей. Тем не менее, я хотел бы иметь возможность получить скриншот dateInput
используемого приложения (скажем, с отображением выбора календаря).
Есть ли способ выдавать команды объекту приложения в скрипте, чтобы я мог получать скриншоты используемого приложения, а не делать это вручную?
Ответ №1:
Вы пробовали использовать ShinyDriver
из shinytest
пакета?
Вы можете использовать shinytest
безголовый браузер для запуска приложения, взаимодействия с ним и создания скриншотов программно. Если у вас не установлен PhantomJS, вам необходимо выполнить shinytest::installDependencies()
его перед использованием ShinyDriver
. Все, что вам нужно сделать, это указать на каталог, содержащий блестящее приложение (в моем случае папка «MyApp»).
install.packages("shinytest")
shinytest::installDependencies()
app <- shinytest::ShinyDriver$new("myApp")
app$takeScreenshot("screenshot1.png")
button <- app$findElement("#button")
button$click()
Sys.sleep(1)
app$takeScreenshot("screenshot2.png")
app$stop()
Я запускаю приложение в безголовом браузере, делаю снимок экрана, нахожу кнопку с идентификатором «кнопка», нажимаю на нее и делаю еще один снимок экрана, затем закрываю приложение. Перейдите к определенным элементам, используя «#id», где id — это просто идентификатор, который вы ввели в shiny. Вы можете указать путь к файлу png в takeScreenshot
вызовах, чтобы затем использовать их в своем коде в другом месте. Обратите внимание, что вам может потребоваться использовать Sys.sleep
, чтобы остановить создание скриншотов до обновления пользовательского интерфейса.