Как найти <span>элемент внутри</span> <tr> <span>от XPath</span>

Вопрос: Мой HTML-код выглядит следующим образом: some Text some Text2 some Text3 Я пытаюсь выбрать каждый из элементов span

Вопрос:

Мой HTML-код выглядит следующим образом:

<html> <body> <div> </div> <div> <table> <tbody id=a> <tr> <td> <div> <span> some Text </span> </div> </td> </tr> <tr> <td> <div> <span> some Text2 </span> </div> </td> </tr> <tr> <td> <div> <span> some Text3 </span> </div> </td> </tr> </tbody> </table> </div> </body>

Я пытаюсь выбрать каждый из элементов span по их тексту. Я могу выбрать tbody по id. Я пробовал это:

tbody.FindElement(By.XPath(String.Format(«.//span[contains(text(), {0}))]», &var))); (var = somex0020Text)

но это всегда возвращает первый элемент <span> в моей таблице.

Я также пробовал:

tbody.FindElements(By.XPath(String.Format(«.//span[contains(text(), {0}))]», &var)));

который возвратил список, содержащий каждый элемент <span> в моей таблице, и я не знаю, почему.

Я также не понимаю, почему

tbody.FindElement(By.XPath(String.Format(«.//span[text() = {0})]», &var)));

бросает элемент Element not found Exception, когда метод contains возвращает элемент <span> с одним и тем же текстом.

Ответ №1

Я попробовал использовать xpath как:

.//span[contains(text(),’some Text’)]

он выбирает все 3 диапазона.

поэтому к этому я обращаюсь к родительскому элементу.

для 1-го .//tbody[@id=’a’]//tr[1]//span[contains(text(),’some Text’)]: .//tbody[@id=’a’]//tr[1]//span[contains(text(),’some Text’)] span[ .//tbody[@id=’a’]//tr[1]//span[contains(text(),’some Text’)]

для 2-го: .//tbody[@id=’a’]//tr[2]//span[contains(text(),’some Text’)] 2] .//tbody[@id=’a’]//tr[2]//span[contains(text(),’some Text’)]

для 3-го: .//tbody[@id=’a’]//tr[3]//span[contains(text(),’some Text’)] 3] .//tbody[@id=’a’]//tr[3]//span[contains(text(),’some Text’)]

через это я могу выбрать каждый элемент span отдельно.

Ответ №2

Вы можете использовать jQuery для получения всех элементов span в “Таблице”.

Пример:

var items = $(‘table div span’); items.each(function (x) { alert(items[x].innerHTML); }); Ответ №3

tbody.FindElement(By.XPath(String.Format(“.//span [содержит (текст(), {0}))]”, & var)));
(var = somex0020Text)

но это всегда возвращает первый элемент в моей таблице.

Это ожидаемое поведение в Селене. Как я вижу, есть 3 элемента с одинаковым xpath, как указано в вашем коде, в этом случае Selenium возвращает первый элемент.

tbody.FindElements(By.XPath(String.Format(“.//span [содержит (текст(), {0}))]”, & var)));

который возвратил список, содержащий каждый элемент в моей таблице, и я не знаю, почему.

Это также ожидаемое поведение в Selenium. FindElements вернет все элементы с одинаковым xpath.

Поэтому измените значение var на some Text2 или some Text3 чтобы найти другие два элемента.

Следующий xpath будет работать для some Text2:

.//span[contains(text(), ‘some Text2’))] Ответ №4

Попробуйте с этим Xpath $ x (“//tr//span [содержит (., ‘Some Text’)]”)

Оцените статью
Добавить комментарий