XPath в RSelenium для индексации списка значений

Вот пример html:

<li class="index i1"
 <ol id="rem">
  <div class="bare">
   <h3>
      <a class="tlt mhead" href="https://www.myexample.com">

<li class="index i2"
 <ol id="rem">
  <div class="bare">
   <h3>
      <a class="tlt mhead" href="https://www.myexample2.com">

Я хотел бы получить значение каждого href в элементе. Что составляет список, так это класс в первом li, в котором изменение имени класса i1, i2. Итак, у меня есть счетчик, и я меняю его, когда иду, чтобы взять значение.

i <- 1
stablestr <- "index "
myVal <- paste(stablestr , i, sep="")

так что даже если попытаться просто получить доступ к общей библиотеке с индексом myVal, используя этот

profile<-remDr$findElement(using = 'xpath', "//*/input[@li = myVal]")
profile$highlightElement()

или href, использующий это

profile<-remDr$findElement(using = 'xpath', "/li[@class=myVal]/ol[@id='rem']/div[@id='bare']/h3/a[@class='tlt']")

profile$highlightElement()

Что-то не так с xpath?


person Elen    schedule 27.09.2016    source источник


Ответы (1)


Ваша структура HTML недействительна. Ваши теги <li> не закрыты должным образом, и, похоже, вы путаете <ol> с <li>. Но ради вопроса я предполагаю, что структура такая, как вы пишете, с правильно закрытыми тегами <li>.

Тогда построение myVal неверно. Это даст "index 1", а вы хотите "index i1". Используйте "index i" для stablestr.

Теперь для XPath:

//*/input[@li = myVal]

Это явно неправильно, поскольку в вашем XML нет input. Кроме того, вы не добавили к переменной префикс $. И, наконец, * кажется ненужным. Попробуй это:

//li[@class = $myVal]

Во втором XPath также есть несколько ошибок:

/li[@class=myVal]/ol[@id='rem']/div[@id='bare']/h3/a[@class='tlt']
           ^                         ^                       ^
     missing $              should be @class    is actually 'tlt mhead'

Первые две проблемы легко исправить. Третьего нет. Вы можете использовать contains(@class, 'tlt'), но это также будет соответствовать классу, например, tltt, что, вероятно, не то, что вам нужно. Во всяком случае, этого может быть достаточно для вашего варианта использования. Фиксированный XPath:

/li[@class=$myVal]/ol[@id='rem']/div[@class='bare']/h3/a[contains(@class, 'tlt')]
person flyx    schedule 27.09.2016
comment
благодарю вас. может ли синтаксис xpath немного отличаться в Rselenium? - person Elen; 27.09.2016
comment
Может быть. Я ничего не знаю о RSelenium, я просто предположил, что если мы говорим о XPath, то он соответствует спецификации. - person flyx; 27.09.2016