Поиск местоположения элемента в Shiny - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть приложение Shiny с различными размерами таблицы в зависимости от входных данных, и я пытаюсь протестировать приложение с помощью RSelenium.Я хотел бы найти расположение элемента с использованием синтаксиса XPath.Поиск одного элемента с использованием точного узла работает нормально, однако, поиск нескольких элементов не возвращает никаких результатов вообще.Мое приложение Shiny не может быть предоставлено в общий доступ, но такие же результаты появляются в размещенном приложении Shiny от RStudio.

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 голосов
/ 27 ноября 2018

В первом XPath вы выбираете третий элемент td, который является дочерним по отношению к первому элементу tr в tbody.

Во втором XPath вы выбираете элемент td(только если у него есть дочерний элемент), который является дочерним элементом элемента tr, который имеет дочерние элементы (что необходимо, поскольку вы хотите выбрать td дочерний элемент (ы)).

Трудно сказать без некоторых примеров данных, но я предполагаю, что ни один из элементов td не имеет дочерних элементов, и поэтому ничего не выбирается.

Настройте XPath, чтобы удалить обаиз фильтров предикатов:

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

Это должно выбрать все столбцы из всех строк в этой таблице.

Если при этом выбирается слишком много столбцов, и вам необходимо его ограничить, предоставьте пример содержимого и опишите, что вы хотите выбрать или исключить, и мы можем помочь вам добавить соответствующий фильтр предикатов.

...