узел webdriver js получает множественную ссылку под тегом класса - PullRequest
0 голосов
/ 16 декабря 2018

как получить тэг подкласса для нескольких ссылок, HTML содержит несколько тэгов для нескольких классов = "blog-item-wrap" каждый тэг содержит тэг.необходимо получить все ссылки href под тегом clas

<div class="blog-item-wrap">
            <a href="https://website.com/data-wrangling-with/" title="Data 
Wrangling with JavaScript">
                        </a>
   </div>
  <div .... >
  <div class="blog-item-wrap">
            <a href="https://website.com/data-wrangling-with/" title="Data 
    Wrangling with JavaScript">
                        </a>
    </div>
     </div>

, используя это и получая ошибку:

StaleElementReferenceError: ссылка на устаревший элемент: элемент не прикреплен к документу страницы

browser.findElement(By.xpath('//*[@class="blog-item-wrap"]/a')).then(res => {  res.getText().then(text => { console.log('text', text); }).catch(err => { console.log('err', err); });

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Ошибка возникает из-за того, что элемент, удаленный или измененный со страницы, пытается использовать Promise и использовать findElements() для получения всех элементов.

browser.get('https://..........')
.then(() => {
  browser.findElements(By.xpath('//*[@class="blog-item-wrap"]//a'))
  .then(res => {
    var links = res.map(aTags => aTags.getText()) // .getAttribute("href")
    Promise.all(links).then(texts => {
      texts.forEach(text => console.log('text: ', text))
    })
  })
  .catch(err => {
    console.log('err: ', err);
  });
})

Не Promise

browser.get('https://....')
  .then(() => {
    browser.findElements(By.xpath('//*[@class="blog-item-wrap"]//a'))
    .then(res => {
      res.forEach(aTags => {
        aTags.getText()
        //aTags.getAttribute("href")
        .then(text => console.log('text: ', text))
        .catch(err => console.log('err: ', err))
    })
  })
})
0 голосов
/ 16 декабря 2018

Вы должны использовать getAttribute("href") на всех элементах с driver.findElements(By.xpath('//*[@class="blog-item-wrap"]/a')).

Затем итерируйте список с getAttribute("href").

, который вы должны подумать об использовании async ...

Надеюсь, это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...