Работа с коллекцией элементов в асинхронном JS

protractor
nodejs
javascript
webdriver
Теги: #<Tag:0x00007f7b63d35820> #<Tag:0x00007f7b63d356e0> #<Tag:0x00007f7b63d355a0> #<Tag:0x00007f7b63d35410>

(Andrey Melnichenko) #1

Использую Protractor + WD
Хочу получить текст всех эелементов со страници по Css селектору а дальше провалидировать каждый сравнив с ожидаемым.

elementsByCss("body > *")
			.then(function(element) {
				console.log(element);
                                console.log(typeof element); // object
			 });

image

Как дождаться всех промисов и получить коллекцию из текстовых значений?

Попытка решить это методами “из коробки” приводит к тому что он все значения лепит в одну строку, разделять по символу “\n” не очень хочется. Возможно есть более правильный подход?

.elementsByCss("body > *")
			.text()
			.then(function(text) {
				text;
				console.log(text);
				text.indexOf("Andrey");
			 });


(Hawk74) #2

Обратите внимание на метод “each” https://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.each
Если я Вас верно понял, конечно.
А так можно что-то типа:
it (‘should do smth’, async () => {
/* your code here */
expect (what).each(() =>
smth.then => expect matching)


(Павел) #3

А лучше используй executeScript и работай с чистыми нодами.


(Andrey Melnichenko) #4

попробую, спасибо!