在Shiny中查找元素位置

时间:2018-11-26 22:21:51

标签: r xpath shiny rselenium web-testing

我有一个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[*]")

1 个答案:

答案 0 :(得分:0)

在第一个XPath中,选择第三个td元素,它是tr下第一个tbody元素的子元素。

在第二个XPath中,您选择td元素(仅当具有子元素时),该元素是具有子元素的tr元素的子元素(因为您必须这样做)要选择td子元素)。

没有一些示例数据很难说,但是我猜想td元素都没有任何子元素,因此它什么也没选择。

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

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

那应该从该表的所有行中选择所有列。

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