在 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 或排除的内容,我们可以帮助您添加适当的谓词过滤器。
我有一个 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 或排除的内容,我们可以帮助您添加适当的谓词过滤器。