我有一个Shiny应用程序,该应用程序的表大小取决于输入,并且我正在尝试使用RSelenium测试该应用程序。我想使用XPath语法找到元素位置。使用精确节点查找一个元素可以很好地工作,但是,找到多个元素根本不会返回任何结果。无法共享我的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[*]")
答案 0 :(得分:0)
在第一个XPath中,选择第三个td
元素,它是tr
下第一个tbody
元素的子元素。
在第二个XPath中,您选择td
元素(仅当具有子元素时),该元素是具有子元素的tr
元素的子元素(因为您必须这样做)要选择td
子元素)。
没有一些示例数据很难说,但是我猜想td
元素都没有任何子元素,因此它什么也没选择。
调整XPath删除两个谓词过滤器:
//*[@id='DataTables_Table_0']/tbody/tr/td
那应该从该表的所有行中选择所有列。
如果选择的列过多,并且您需要对其进行限制,请提供一些示例内容并描述您要选择或排除的内容,我们可以帮助您添加适当的谓词过滤器。