Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ChromeDevTools协议单击元素?_R_Shiny_Chrome Devtools Protocol - Fatal编程技术网

如何使用ChromeDevTools协议单击元素?

如何使用ChromeDevTools协议单击元素?,r,shiny,chrome-devtools-protocol,R,Shiny,Chrome Devtools Protocol,我正在使用ChromoteR软件包,并用闪亮的应用程序对其进行测试。我试着点击图标,它应该复制一些选择元素。但当我截图时,我所拥有的只是工具提示,如果我打开浏览器,它会冻结程序 这是我的密码: #' Run shiny in background - based on shinytest source code #' @export shiny.bg <- function(path, loadTimeout = 10000, shinyOptions = list()) { temp

我正在使用ChromoteR软件包,并用闪亮的应用程序对其进行测试。我试着点击图标,它应该复制一些选择元素。但当我截图时,我所拥有的只是工具提示,如果我打开浏览器,它会冻结程序

这是我的密码:

#' Run shiny in background - based on shinytest source code
#' @export
shiny.bg <- function(path, loadTimeout = 10000, shinyOptions = list()) {
  tempfile_format <- tempfile("%s-", fileext = ".log")
  p <- callr::r_bg(function(path, shinyOptions) {
    do.call(shiny::runApp, c(path, shinyOptions))
  },
  args = list(
      path = normalizePath(path),
      shinyOptions = shinyOptions
    ),
    stdout = sprintf(tempfile_format, "shiny-stdout"),
    stderr = sprintf(tempfile_format, "shiny-stderr"),
    supervise = TRUE
  )
  if (! p$is_alive()) {
    abort(paste0(
      "Failed to start shiny. Error: ",
      strwrap(readLines(p$get_error_file()))
    ))
  }
  ## Try to read out the port. Try 5 times/sec, until timeout.
  max_i <- loadTimeout / 1000 * 5
  for (i in seq_len(max_i)) {
    err_lines <- readLines(p$get_error_file())

    if (!p$is_alive()) {
      abort(paste0(
        "Error starting application:\n", paste(err_lines, collapse = "\n")
      ))
    }
    if (any(grepl("Listening on http", err_lines))) break

    Sys.sleep(0.2)
  }
  if (i == max_i) {
    abort(paste0(
      "Cannot find shiny port number. Error:\n", paste(err_lines, collapse = "\n")
    ))
  }

  line <- err_lines[grepl("Listening on http", err_lines)]
  m <- rematch::re_match(text = line, "https?://(?<host>[^:]+):(?<port>[0-9]+)")
  
  url <- sub(".*(https?://.*)", "\\1", line)
  
  list(
    process = p,
    url = url
  )
}

#' Run shiny application and Chromeote instance
chromote.shiny <- function() {
  chr <- chromote::ChromoteSession$new()
  app <- shiny.bg('.')
  
  chr$Page$navigate(app$url)
  chr$Page$loadEventFired()
  chr$screenshot()
  
  list(
    chr = chr,
    app = app
  )
}

#' kill browser and R shiny process
cleanUp <- function(obj) {
  obj$chr$Browser$close()
  obj$app$process$kill()
}

#' click on the element
chromote.click <- function(chromote, selector) {
  doc = chromote$DOM$getDocument()
  node = chromote$DOM$querySelector(doc$root$nodeId, selector)
  box <- chromote$DOM$getBoxModel(node$nodeId)
  left <- box$model$content[[1]]
  top <- box$model$content[[2]]
  x <- left + (box$model$width / 2)
  y <- top + (box$model$height / 2)
  chromote$Input$dispatchMouseEvent(type = "mousePressed", x = x, y = y, button="left")
  chromote$Input$dispatchMouseEvent(type = "mouseReleased", x = x, y = y, button="left")
}

tmp <- chromote.shiny()
chromote.click(tmp$chr, ".clone-pair")
tmp$chr$screenshot()
我不知道如何调试它,也没有太多关于如何点击的信息,我发现chromote的GitHub repo中存在DispatchMouseeEvent问题

回购协议链接

我之所以想使用chromote,是因为我想为我的应用程序创建单元/集成测试,而shinytest已经过时了。它使用多年前废弃的phantomJS,所以你需要使用非常旧的JavaScript,因为否则pantomJS将抛出错误,测试将失败,也不再维护。

也有同样的问题

我发现这个库使用chromote,但有许多函数GetElement,单击RSelenium

安装.packagesremotes remotes::install_githubrundel/hayalbaz也有同样的问题

我发现这个库使用chromote,但有许多函数GetElement,单击RSelenium

安装.packagesremotes 遥控器::安装_githubrundel/hayalbaz