Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   на selenium webdriver js нужно вывести содержимое всех тегов с классом item (https://javascript.ru/forum/misc/78821-na-selenium-webdriver-js-nuzhno-vyvesti-soderzhimoe-vsekh-tegov-s-klassom-item.html)

AlexBoo 09.11.2019 02:36

на selenium webdriver js нужно вывести содержимое всех тегов с классом item
 
Пишу автотест на selenium webdriver js, в котором нужно вывести содержимое тегов div class="item" (' Item 1 ', ... ' Item 4 '). Пробовал получить массив класса list с дочерними элементами item и найти все элементы по классу item и перебрать в цикле, но у меня ничего не вышло. Подскажите как это сделать

autotest.js:
const { By, Key, until } = require("selenium-webdriver"); 
const webdriver = require("selenium-webdriver"); 
require("chromedriver"); 

let promise = require("selenium-webdriver").promise; 
  await driver.get('http://www.test.site') ;
   
    let pendingElements = driver.findElements(By.className('item')); 

       pendingElements.then(function (elements) { 
            let pendingHtml = elements.map(function (elem) { 
                return elem.getInnerHtml(); 
              }); 

      promise.all(pendingHtml).then(function (allHtml) {
             console.log(allHtml);
     // Здесь по логике я должен получить массив значений (Item 1, Item 2 ...)
       });
    });

test.site.html:
<body> 
 <div class="list> 
  <div class="item">
   <div>
    <strong> Item 1 </strong>
    </div>
    </div> 
 <div class="item"> 
  <div> 
   <strong> Item 2 </strong>
   </div>
   </div> 
 <div class="item">
  <div> 
   <strong> Item 3 </strong>
  </div>
  </div>
  <div class="item"> 
  <div> 
   <strong> Item 4 </strong>
   </div>
   </div>
 </div>
 </body>

Данный код выдает ошибку (not a function):
TypeError: pendingElementsConfigList.then is not a function at autoTest (/home/automation_testing/tests/autoTest.js:69:35) at process._tickCallback (internal/process/next_tick.js:68:7)

если вывести нулевой элемент:
console.log(pendingElements[0]); то в консоли выведет это:
WebElement { 
driver_: Driver { session_: Promise { [Session] }, 
executor_: Executor { w3c: true, customCommands_: [Map], log_: [Logger] },
 fileDetector_: null, onQuit_: [Function: onQuit] },
 id_: Promise { '781fdd8b-08e5-4aee-8ce6-c3b800a75956' }
 }

из этого как-то нужно вывести значения элементов с классом item

рони 09.11.2019 09:30

AlexBoo,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

AlexBoo 09.11.2019 12:37

спасибо, что подсказали.
Исправил, прошу прощения что сразу не предоставил код в подобающем виде

Malleys 09.11.2019 20:11

const { Builder, By, Key, until } = require("selenium-webdriver");

(async() => {
	let driver = await new Builder().forBrowser("chrome").build();
	await driver.get("http://localhost:5001/");

	let pendingElements = driver.findElements(By.className("item"));

	pendingElements.then(function(elements) {
		let pendingHtml = elements.map(function(elem) {
			return elem.getText();
		});

		Promise.all(pendingHtml).then(function(allHtml) {
			console.log(allHtml);
		});
	});
})();


Замените http://localhost:5001/ на адрес своей страницы.

AlexBoo 11.11.2019 11:23

спасибо, сработало.


Часовой пояс GMT +3, время: 11:48.