Селен - Нажмите на элемент с текстом - PullRequest
0 голосов
/ 15 октября 2019

У меня есть этот код:

<li class="search-choice" id="elementID">
<span>TEST.SER</span>
<a href="javascript:void(0)" class="search-choice-close" rel="53"></a></li>

И это выглядит так:

enter image description here

И я хочу выполнитьнажмите на X элементов, но с учетом имени без идентификатора. Я пытаюсь это сделать, но не получаю его:

   "test2": (By.XPATH, "//a[@class='search-choice-close' and contains(text(), 'TEST.SER')]"),
    "test3": (By.XPATH, "//a[@class='search-choice-close']//span[contains(text(),'TEST.SER')]"),
    "test": (By.XPATH,"//li[@class='search-choice']//span[contains(text(),'TEST.SER')]//a[ @class ='search-choice-close']")

Есть предложения?

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

Text () TEST.SER и class = "search-choice-close" не находятся в одной иерархии, поэтому опция 1 не будет работать.

иерархия варианта 2, созданная вашим локатором, неверна. span выше тега

, опция 3 вы пытаетесь нажать на элемент li вместо href. Так что это не будет работать.

Попробуйте By.XPATH (// a [@ class = 'search-choice-close'] / parent :: span [содержит (text (), 'TEST.SER')]) если вы хотите нажать на текст.

Если вы хотите нажать на изображение, просто используйте By.XPATH (// a [@ class = 'search-choice-close'])

0 голосов
/ 16 октября 2019

Причина, по которой ваши xpath не находят правильный элемент, заключается в том, что они ищут атрибуты и span, и тега, как если бы они были одним и тем же элементом, или как если бы один был встроен в другой. Вместо этого вам нужно будет найти элемент span, а затем найти соседний элемент, следующий за ним.

Причины ваших проблем:

"test2": (By.XPATH, "//a[@class='search-choice-close' and contains(text(), 'TEST.SER')]")

Здесь вы ищете элемент, которыйсодержит правильный класс элемента a, но текст элемента span

"test3": (By.XPATH, "//a[@class='search-choice-close']//span[contains(text(),'TEST.SER')]")

Здесь вы ищете элемент span, как если бы он существовал внутри элемента a, но он не существует внутри элемента aэлемент, но вдоль него

"test": (By.XPATH,"//li[@class='search-choice']//span[contains(text(),'TEST.SER')]//a[ @class ='search-choice-close']")

Здесь вы делаете то же, что и выше, ища элемент внутри элемента span. Элементы не являются потомками или предками друг друга, а скорее братьями и сестрами.

Что вам нужно сделать, это найти элемент родственного элемента для элемента span, если вам нужно искать элемент a, используя текстпромежуток до него.

//span[text()='TEST.SER']/following::a

Вот еще некоторая информация об иерархии элементов в DOM, которая может быть полезна для вас, когда вы в следующий раз столкнетесь с проблемами при поиске элементов через Xpath. https://www.w3schools.com/xml/xpath_nodes.asp

0 голосов
/ 15 октября 2019

попробуйте с ниже XPath

//span[text()='TEST.SER']/following::a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...