Тема интересная, я лично никогда не использую предложенные селекторы тоже. Тип CSS тоже юзаю редко. Тут либо MATCH, либо XPATH.
MATCH более универсален, но по дефолту в него нельзя загнать логические операторы, чего не сказать по XPATH где можно задавать "ИЛИ" и "И". Чтобы корректно определить селектор, нужно конечно же изучить html-код изнутри. Я лично не цепляюсь к классам, т.к. они могут быть общие для всех, чаще всего задают какой-то графический стиль, и завтра, поменяв дизайн, верстальщики могут этот класс куда-то сдвинуть или вообще убрать. Как правило неизменными остаются атрибуты name, id, title, aria-label, особенно атрибут name (тот, кто знаком с бэкэндом, понимает, почему его меняют в самую последнюю очередь). Поэтому мой селектор чаще выглядит кусочным, например таким:
>MATCH>id="thisName"
Я не захватываю даже название тега, потому что очень часто встречался с тем, что полностью сохраняется внутренность, а именно тег меняется, например с <div> на <span> или <p>. Поработав с гуглом, я понял одно: как не изощряйся, твои селекторы будут недолгосрочны, поэтому я написал себе модуль, который проверяет существование одного элемента, перебирая все возможные варианты: поиск по MATCH, XPATH, КАРТИНКЕ в base64. И я загоняю, например, туда штук 20 возможных вариаций одного и того же селектора, таким образом, если отлетел код, то base64 визуальность мог не поменять. Всем советую такой модуль себе запилить :)