WebdriverIO: что эквивалентно elementIdHtml? - PullRequest
0 голосов
/ 15 февраля 2019

Как получить внутренний HTML-код элемента из elementId с помощью объекта браузера?

Есть ли что-то вроде elementIdHtml, доступное в API WebdriverIO?

getHTML ссылка для v4 возвращает 403 Запрещено .


Моя цель состоит в том, чтобы мне нужно было получить весь текст внутри всего a._3cnp из elementId

пример html

<div class="container">
    <a class="_3cnp">first link</a>
    <a class="_3cnp">second link</a>
    <a class="_3cnp">third link</a>
</div>

необходимо преобразовать это в ["первая ссылка", "вторая ссылка", ..]

у меня уже есть .container elementId

это то, что я сделал

.then(() => browser.elementIdElements(someElementId, 'a._3cnp'))
.then(buttonElem => {
    console.log('->', buttonElem)
    console.log('-->', buttonElem.getHTML)
    buttonElem.getHTML().then(x => console.log('---->', x))
    return buttonElem.value
})

результат elementIdElements - buttonElem

{ sessionId: '2e2f144c8895a03da1b8df92f4613a33',
  status: 0,
  value:
   [ { ELEMENT: '0.6603119466268468-24',
       'element-6066-11e4-a52e-4f735466cecf': '0.6603119466268468-24' } ],
  selector: 'a._3cnp' }

, но buttonElem.getHTML - undefined

im, использующийwebdriverio автономно от botium-webdriverio-разъем

1 Ответ

0 голосов
/ 15 февраля 2019

LE:

Измените свой код в соответствии со следующим:

.then(() => browser.elementIdElements(someElementId, 'a._3cnp'))
.then(buttonElem => {
    // buttonElem's 'value' will contain a list of all the matching elements
    // thus, you have to call getHTML() on each item from 'value'

    // the following will return the HTML of the first matching element
    console.log('\nPrint element HTML: ' + buttonElem.value[0].getHTML());
    return buttonElem.value[0].getHTML();
})

Лучшим подходом было бы зацикливаться между ними и печатать HTML:

.then(() => browser.elementIdElements(someElementId, 'a._3cnp'))
.value.forEach(buttonElem => {

    console.log('\nPrint element HTML: ' + buttonElem.getHTML());
    return buttonElem.getHTML();
})

Свойство .getHTML() распространяется на все объекты ELEMENT.Ради более дидактического подхода я собираюсь рассмотреть задачу как манипуляцию кодом HTML , найденным в серии элементов списка (<li>), из неупорядоченного списка (<ul>).

Таким образом, вы можете сделать следующее:

  • browser.getHTML('ul.ourList li.ourListItems') ( это вернет список всех HTML-кодов <li> )
  • browser.element('ul.ourList li.ourListItems').getHTML() ( вернет первый <li>'s HTML-код )
  • $('ul.ourList li.ourListItems').getHTML() ( это эквивалент команды выше, только aрасслабленная версия )

Если вам нужно перебрать все <li> s и получить HTML, сделайте следующее:

let locator = 'ul.ourList li.ourListItems';

browser.elements(locator).value.forEach(elem => {
  let elemHTML = elem.getHTML();

  console.log( JSON.stringify(elemHTML) );
  elemHTML.doSomethingWithIt();
})

где, elem будет объектом в следующем формате:

{ ELEMENT: '0.285350058261731-1',
  'element-6066-11e4-a52e-4f735466cecf': '0.285350058261731-1',
  selector: 'ul li.fw-item.fz-16.lh-36.pos-r',
  value: { ELEMENT: '0.285350058261731-1' },
  index: 0 
}
...