Причина, по которой ваши 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