Webdriver node js получает множественную ссылку под тегом класса

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

<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: stale element reference: element is not attached to the page document

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

Как ты пробовал? Поделитесь своим кодом и журналом исключений

Andersson 16.12.2018 16:59

Основываясь на этом ответе: stackoverflow.com/questions/5543724/… вы должны использовать XPATH //div[contains(@class, 'ui-autocomplete')]/a

ymz 16.12.2018 17:04

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

Atiq Ur Rehman 16.12.2018 17:18

пытаюсь это сделать, но получаю ошибку UnhandledPromiseRejectionWarning: StaleElementReferenceError: ссылка на устаревший элемент: элемент не прикреплен к странице документа

Atiq Ur Rehman 16.12.2018 17:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
730
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Затем просмотрите список с помощью getAttribute("href").

вам стоит подумать об использовании async ...

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

братан, я новенький, ты можешь объяснить мне, пожалуйста, в формате кода?

Atiq Ur Rehman 17.12.2018 13:32

browser.findElement (By.xpath ('// * [@ class = "blog-item-wrap"] // ‌ a')). then (res => {res.getAttribute ("href") .then ( text => {console.info ('text:', text)}) дайте мне одну ссылку, расскажите, пожалуйста, как получить все ссылки Спасибо

Atiq Ur Rehman 18.12.2018 06:11

Просто замените browser.findElement на browser.findElements

Moshe Slavin 18.12.2018 07:39

Ошибка возникает из-за того, что элемент, удаленный или измененный со страницы, пытается использовать 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.info('text: ', text))
    })
  })
  .catch(err => {
    console.info('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.info('text: ', text))
        .catch(err => console.info('err: ', err))
    })
  })
})

res = WebElement {driver_: thenableWebDriverProxy, id_: Promise} driver_: thenableWebDriverProxy {session_: Promise, executor_: Executor, fileDetector_: null,…} id_: Promise {resolved} should: Proxy прото: Object {constructor:, getIdriver:, getIdriver: :,…} Res.map не является ошибкой функции

Atiq Ur Rehman 17.12.2018 12:24

могу я узнать URL страницы

ewwink 17.12.2018 12:26

он работает найти, за исключением того, что в xpath необходимо изменить /a на //a и убедиться, что вы используете последние версии chromedriver и Chrome

ewwink 17.12.2018 12:35

использование не Promise также возвращает ожидаемый результат, см. отредактированный ответ. Думаю, проблема в старой версии приложений.

ewwink 17.12.2018 12:39

UnhandledPromiseRejectionWarning: TypeError: res.forEach не является функцией

Atiq Ur Rehman 17.12.2018 12:47

res находится в форме обещания, а не массива

Atiq Ur Rehman 17.12.2018 12:47

вы используете последние версии chromedriver и Chrome? также рассмотрите возможность обновления nodejs

ewwink 17.12.2018 12:51

последняя версия chromedriver, я обновлю хром и узел

Atiq Ur Rehman 17.12.2018 12:53

@AtiqUrRehman, значит, вы последовали моему предложению обновить Chrome?

ewwink 18.12.2018 11:57

Другие вопросы по теме