WebdriverIO: что эквивалентно elementIdHtml?
Как получить внутренний 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
я использую webdriverio автономно от botium-webdriverio-разъем
1 ответ
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')
(это вернет список всех<li>
HTML код)browser.element('ul.ourList li.ourListItems').getHTML()
(это вернет первое<li>'s
HTML код)$('ul.ourList li.ourListItems').getHTML()
(это эквивалент команды выше, только расслабленная версия)
Если вам нужно перебрать все <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
will является объектом следующего формата:
{ 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
}