Выберите дочерний элемент из родителя, используя двоюродный узел того же родителя


person Prr    schedule 08.03.2019    source источник
comment
Сэр, можно ли скопировать/вставить html-дом, чтобы понять вопрос?   -  person M. Gara    schedule 08.03.2019
comment
Я не могу вставить изображение. Я думал, что сделал, но он не появляется. Позвольте мне попытаться быстро исправить это   -  person Prr    schedule 08.03.2019


Ответы (2)


TestCafe API достаточно умен, чтобы справиться с вашим случаем:

const JohnSelector = Selector('div.person-identity')
  .find('span.person-name')
  .withExactText('John');

const pathSelector = JohnSelector
  .parent('div.projects-project-role')
  .prevSibling('div.projects-project-role')
  .find('button svg path')
  .nth(1);

console.log(`${await JohnSelector.innerText}`);
console.log(`${await pathSelector.getAttribute("d")}`);
person hdorgeval    schedule 08.03.2019

В jQuery вы можете получить все элементы с классом projects-project-role, а затем найти в каждом из этих элементов тег path и элемент класса person-name и добавить их значения в массив, например:

var namePath = []; // initialize empty name/path array
$(".projects-project-role").each(function() {  // go through each element of class projects-project-role
    var path = $(this).find("path").attr("d"); // look for a path tag subelement and grab its d attribute
    var name = $(this).find(".person-name").text(); // look for an element of class person-name and grab its text
    namePath.push({path: path, name: name}); // add the gathered path and name to an array
});
console.log(namePath); // display the array

РЕДАКТИРОВАТЬ: Или в сокращении и с map:

var namePath = $(".projects-project-role").get().map((p)=>({path: $(p).find('path').attr('d'), name: $(p).find('.person-name').text()}));
console.log(namePath); // display the array
person omikes    schedule 08.03.2019
comment
это тоже решение, но я ищу решение TestCafe, которое мне показалось более удобным. - person Prr; 12.03.2019