在 Shiny 中查找元素位置

Finding element location in Shiny

我有一个 Shiny 应用程序,其 table 大小取决于输入,我正在尝试使用 RSelenium 测试该应用程序。我想使用 XPath 语法查找元素位置。使用精确节点查找一个元素工作正常,但是,查找多个元素根本 return 没有任何结果。无法共享我的 Shiny 应用程序,但在 RStudio 的 Shiny 托管应用程序上会出现相同的结果。

library(RSelenium)

rd <- rsDriver()
r <- rd$client
r$navigate('https://shiny.rstudio.com/gallery/datatables-demo.html')
r$switchToFrame(r$findElements("css selector", "iframe")[[1]])


e <- r$findElements('xpath', "//*[@id='DataTables_Table_0']/tbody/tr[1]/td[3]")
e[[1]]$getElementText()
e[[1]]$getElementLocation()[c('x', 'y')]
# Works as expected 


# Find all elements - does not find any elements

e_all <- r$findElements('xpath', "//*[@id='DataTables_Table_0']/tbody/tr[*]/td[*]")

在第一个 XPath 中,您正在 selecting 第三个 td 元素,它是 tbody.

下第一个 tr 元素的子元素

在第二个 XPath 中,您正在 selecting td 元素(仅当它具有子元素时),该元素是具有子元素的 tr 元素的子元素(它必须这样做,因为你想 select td 子元素)。

没有一些样本数据很难判断,但我猜测 td 元素中的 none 有任何子元素,所以它不是 select任何东西。

调整 XPath 以删除两个谓词过滤器:

//*[@id='DataTables_Table_0']/tbody/tr/td

那应该 select 该 table 中所有行的所有列。

如果 select 的列太多而您需要对其进行限制,请提供一些示例内容并描述您想要 select 或排除的内容,我们可以帮助您添加适当的谓词过滤器。