| ShinyDriver | R Documentation |
This class starts a Shiny app in a new R session, along with a phantom.js
headless browser that can be used to simulate user actions. This provides
a full simulation of a Shiny app so that you can test user interactions
with a live app.
new()ShinyDriver$new(
path = ".",
loadTimeout = NULL,
checkNames = TRUE,
debug = c("none", "all", shinytest::ShinyDriver$debugLogTypes),
phantomTimeout = 5000,
seed = NULL,
cleanLogs = TRUE,
shinyOptions = list(),
renderArgs = NULL,
options = list()
)pathPath to a directory containing a Shiny app, i.e. a
single app.R file or a server.R-ui.R pair.
loadTimeoutHow long to wait for the app to load, in ms. This includes the time to start R. Defaults to 5s when running locally and 10s when running on CI.
checkNamesCheck if widget names are unique?
debugStart the app in debugging mode? In debugging mode debug messages are printed to the console.
phantomTimeoutHow long to wait when connecting to phantomJS process, in ms
seedAn optional random seed to use before starting the application. For apps that use R's random number generator, this can make their behavior repeatable.
cleanLogsWhether to remove the stdout and stderr logs when the Shiny process object is garbage collected.
shinyOptionsA list of options to pass to shiny::runApp().
renderArgsPassed to rmarkdown::run() for interactive .Rmds.
optionsA list of base::options() to set in the driver's child
process.
finalize()Stop app and clean up logs.
ShinyDriver$finalize()
stop()Stop the app, the terminate external R process that runs the app and the phantomjs instance.
ShinyDriver$stop()
getValue()Finds a widget and queries its value. See the getValue() method of
Widget for more details.
ShinyDriver$getValue(name, iotype = c("auto", "input", "output"))nameName of a shiny widget.
iotypeType of the Shiny widget. Usually shinytest finds the widgets by their name, so this is only needed if you use the same name for an input and output widget.
setValue()Finds a widget and sets its value. It's a shortcut for findElement()
plus setValue(); see the Widget documentation for more details.
ShinyDriver$setValue(name, value, iotype = c("auto", "input", "output"))nameName of a shiny widget.
valueNew value.
iotypeType of the Shiny widget. Usually shinytest finds the widgets by their name, so this is only needed if you use the same name for an input and output widget.
Self, invisibly.
click()Find a widget and click it. It's a shortcut for findElement()
plus click(); see the Widget documentation for more details.
ShinyDriver$click(name, iotype = c("auto", "input", "output"))nameName of a shiny widget.
iotypeType of the Shiny widget. Usually shinytest finds the widgets by their name, so this is only needed if you use the same name for an input and output widget.
getAllValues()Returns a named list of all inputs, outputs, and export values.
ShinyDriver$getAllValues(input = TRUE, output = TRUE, export = TRUE)
input, output, exportEither TRUE to return all
input/output/exported values, or a character vector of specific
controls.
sendKeys()Sends the specified keys to specific HTML element. Shortcut for
findWidget() plus sendKeys().
ShinyDriver$sendKeys(name, keys)
nameName of a shiny widget.
keysKeys to send to the widget or the app. See webdriver::key for how to specific special keys.
Self, invisibly.
setWindowSize()Sets size of the browser window.
ShinyDriver$setWindowSize(width, height)
width, heightHeight and width of browser, in pixels.
Self, invisibly.
getWindowSize()Get current size of the browser window, as list of integer scalars
named width and height.
ShinyDriver$getWindowSize()
getDebugLog()Query one or more of the debug logs.
ShinyDriver$getDebugLog(type = c("all", ShinyDriver$debugLogTypes))typeLog type: "all", "shiny_console", "browser",
or "shinytest".
enableDebugLogMessages()Enable/disable debugging messages
ShinyDriver$enableDebugLogMessages(enable = TRUE)
enableNew value.
logEvent()Add event to log.
ShinyDriver$logEvent(event, ...)
eventEvent name
...Addition data to store for event
getEventLog()Retrieve event log.
ShinyDriver$getEventLog()
getUrl()Get current url
ShinyDriver$getUrl()
getTitle()Get page title
ShinyDriver$getTitle()
getSource()Get complete source of current page.
ShinyDriver$getSource()
goBack()Return to previous page
ShinyDriver$goBack()
Self, invisibly.
refresh()Refresh the browser
ShinyDriver$refresh()
Self, invisibly.
takeScreenshot()Takes a screenshot of the current page and writes it to a PNG file or shows on current graphics device.
ShinyDriver$takeScreenshot(file = NULL, id = NULL, parent = FALSE)
fileFile name to save the screenshot to. If NULL, then
it will be shown on the R graphics device.
idIf not-NULL, will take a screenshot of element with this id.
parentIf TRUE, will take screenshot of parent of id; this
is useful if you also want to capture the label attached to a Shiny
control.
Self, invisibly.
findElement()Find an HTML element on the page, using a CSS selector, XPath expression,
or link text (for <a> tags). If multiple elements are matched, only
the first is returned.
ShinyDriver$findElement( css = NULL, linkText = NULL, partialLinkText = NULL, xpath = NULL )
cssCSS selector to find an HTML element.
linkTextFind <a> HTML elements based on exact innerText
partialLinkTextFind <a> HTML elements based on partial innerText
xpathFind HTML elements using XPath expressions.
A webdriver::Element.
findElements()Find all elements matching CSS selection, xpath, or link text.
ShinyDriver$findElements( css = NULL, linkText = NULL, partialLinkText = NULL, xpath = NULL )
cssCSS selector to find an HTML element.
linkTextFind <a> HTML elements based on exact innerText
partialLinkTextFind <a> HTML elements based on partial innerText
xpathFind HTML elements using XPath expressions.
A list of webdriver::Elements.
waitFor()Waits until a JavaScript expression evaluates to true or the
timeout is exceeded.
ShinyDriver$waitFor(expr, checkInterval = 100, timeout = 3000)
exprA string containing JavaScript code. Will wait until the
condition returns true.
checkIntervalHow often to check for the condition, in ms.
timeoutAmount of time to wait before giving up (milliseconds).
TRUE if expression evaluates to true without error, before
timeout. Otherwise returns NA.
waitForShiny()Waits until Shiny is not busy, i.e. the reactive graph has finished
updating. This is useful, for example, if you've resized the window with
setWindowSize() and want to make sure all plot redrawing is complete
before take a screenshot.
ShinyDriver$waitForShiny()
TRUE if done before before timeout; NA otherwise.
waitForValue()Waits until the input or output with name name is not one of
ignored values, or the timeout is reached.
This function can be useful in helping determine if an application has initialized or finished processing a complex reactive situation.
ShinyDriver$waitForValue(
name,
ignore = list(NULL, ""),
iotype = c("input", "output", "export"),
timeout = 10000,
checkInterval = 400
)nameName of a shiny widget.
ignoreList of possible values to ignore when checking for updates.
iotypeType of the Shiny widget. Usually shinytest finds the widgets by their name, so this is only needed if you use the same name for an input and output widget.
timeoutAmount of time to wait before giving up (milliseconds).
checkIntervalHow often to check for the condition, in ms.
listWidgets()Lists the names of all input and output widgets
ShinyDriver$listWidgets()
A list of two character vectors, named input and output.
checkUniqueWidgetNames()Check if Shiny widget names are unique.
ShinyDriver$checkUniqueWidgetNames()
executeScript()Execute JS code
ShinyDriver$executeScript(script, ...)
scriptJS to execute.
...Additional arguments to script.
Self, invisibly.
executeScriptAsync()Execute JS code asynchronously.
ShinyDriver$executeScriptAsync(script, ...)
scriptJS to execute.
...Additional arguments to script.
Self, invisibly.
findWidget()Finds the a Shiny input or output control.
ShinyDriver$findWidget(name, iotype = c("auto", "input", "output"))nameName of a shiny widget.
iotypeType of the Shiny widget. Usually shinytest finds the widgets by their name, so this is only needed if you use the same name for an input and output widget.
A Widget.
expectUpdate()It performs one or more update operations via the browser, thens
waits for the specified output(s) to update. The test succeeds if
all specified output widgets are updated before the timeout.
For updates that involve a lot of computation, increase the timeout.
ShinyDriver$expectUpdate(
output,
...,
timeout = 3000,
iotype = c("auto", "input", "output")
)outputName of output control to check.
...Name-value pairs used to update inputs.
timeoutAmount of time to wait before giving up (milliseconds).
iotypeType of the Shiny widget. Usually shinytest finds the widgets by their name, so this is only needed if you use the same name for an input and output widget.
setInputs()Sets input values.
ShinyDriver$setInputs(
...,
wait_ = TRUE,
values_ = TRUE,
timeout_ = 3000,
allowInputNoBinding_ = FALSE,
priority_ = c("input", "event")
)...Name-value pairs, name1 = value1, name2 = value2 etc.
Enput with name name1 will be assigned value value1.
wait_Wait until all reactive updates have completed?
values_If TRUE, will return final updated values of inputs.
timeout_Amount of time to wait before giving up (milliseconds).
allowInputNoBinding_When setting the value of an input, allow it to set the value of an input even if that input does not have an input binding.
priority_Sets the event priority. For expert use only: see https://shiny.rstudio.com/articles/communicating-with-js.html#values-vs-events for details.
Returns updated values, invisibly.
uploadFile()Uploads a file to a file input.
ShinyDriver$uploadFile(..., wait_ = TRUE, values_ = TRUE, timeout_ = 3000)
...Name-path pairs, e.g. name1 = path1. The file located at
path1 will be uploaded to file input with name name1.
wait_Wait until all reactive updates have completed?
values_If TRUE, will return final updated values of download
control.
timeout_Amount of time to wait before giving up (milliseconds).
snapshotInit()Download a snapshot. Generally, you should not call this function
yourself; it will be generated by recordTest() as needed.
ShinyDriver$snapshotInit(path, screenshot = TRUE)
pathDirectory to save snapshots.
screenshotTake screenshots for each snapshot?
snapshot()Take a snapshot. Generally, you should not call this function
yourself; it will be generated by recordTest() as needed.
ShinyDriver$snapshot(items = NULL, filename = NULL, screenshot = NULL)
itemsElements to include in snapshot
filenameFilename to use. It is recommended to use a .json
file extension.
screenshotTake a screenshot? Overrides value set by
$snapshotInit()
snapshotCompare()Deprecated
ShinyDriver$snapshotCompare(...)
...Ignored
snapshotDownload()Snapshot a file download action. Generally, you should not call this
function yourself; it will be generated by recordTest() as needed.
ShinyDriver$snapshotDownload(id, filename = NULL)
idOutput id of shiny::downloadButton()/shiny::downloadLink()
filenameFile name to save file to. The default, NULL,
generates an ascending sequence of names: 001.download,
002.download, etc.
getAppDir()Directory where app is located
ShinyDriver$getAppDir()
getAppFilename()App file name, i.e. app.R or server.R. NULL for Rmds.
ShinyDriver$getAppFilename()
getTestsDir()Directory where tests are located
ShinyDriver$getTestsDir()
getRelativePathToApp()Relative path to app from current directory.
ShinyDriver$getRelativePathToApp()
getSnapshotDir()Directory where snapshots are located.
ShinyDriver$getSnapshotDir()
isRmd()Is this app an Shiny Rmd document?
ShinyDriver$isRmd()
clone()The objects of this class are cloneable with this method.
ShinyDriver$clone(deep = FALSE)
deepWhether to make a deep clone.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.