Как мне найти кнопку, которая находится в одной строке с именем "Lois" используя XPath
<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
border: 1px solid black;
}
</style>
</head>
<body>
<h2>Add a border to a table:</h2>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr>
<td>Peter</td>
<td>Griffin</td>
<td><button type="button">Click!</button></td>
</tr>
<tr>
<td>Lois</td>
<td>Griffin</td>
<td><button type="button">Click!</button></td>
</tr>
</table>
</body>
</html>
Простой вариант - таблица как на картинке из 3 столбцов, поиск состоит из двух этапов:
находим столбец ячейки, который содержит имя "Lois"
.//tr/td[text()[.="Lois"]]
Принимаем, что структура таблицы постоянна и получаем второй элемент-родственник относительно столбца "Lois" и его кнопку
.//tr/td[text()[.="Lois"]]/following-sibling::td[position()=2]/button
Второй вариант - если длина таблицы неограничена (кроме имени и фамилии будет куча других параметров), но "Имя" будет начинать строку, а "Кнопка" - заканчивать, мы можем взять последний элемент, который соответствует кнопке:
.//tr/td[text()[.="Lois"]]/following-sibling::td[last()]/button
Самый универсальный вариант, когда мы не зависим от положения ячейки имени и кнопки
.//tr[td[text()[.="Lois"]]]/td/button
На еще более универсальный вариант натолкнул комментарий lospejos.
Учитываем, что имя "Lois" соответствует столбцу "Firstname", а не какому-нибудь другому. Мы находим позицию заголовка "Firstname" (позиция 1) с помощью запроса
count(tr/th/text()[.="Firstname"]/preceding-sibling::*)+1
и используем ее для поиска имени "Lois" в строке
.//tr[td[count(tr/th/text()[.="Firstname"]/preceding-sibling::*)+1][text()[.="Lois"]]]/td/button
что, с учетом вычисленного count, для машины выглядит так
.//tr[td[1][text()[.="Lois"]]]/td/button
то есть наш элемент должен соответствовать двум условиям - находится под заголовком "Firstname" и иметь имя "Lois"
TL;DR;
Находим элемент кнопки:
/html/body/table/tr[td[1]/text()='Lois' and td[2]/text()='Griffin']/td/button
Находим элемент ячейки (с кнопкой):
/html/body/table/tr[td[1]/text()='Lois' and td[2]/text()='Griffin']/td
Хочу заметить, что в этом ответе допущение о том, что в первой ячейке каждой строки таблицы содержится имя, а во второй - фамилия. Если структура таблицы будет динамической, необходимо применять более интеллектуальный алгоритм поиска.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В общем нужно было добавить в шапку некоторые блоки, отредактировал код через админку, а редактор кода "натворил" дел с ним, и теперь стили...
Добрый день! Есть задача отсортировать блоки внутри одного блокаHtml имеет такую структуру:
Приветствую! Необходимо создать страницу, где посередине была бы одна кнопка "Вход", нажав на которую ПОВЕРХ неё появилось бы окно, куда надо...