Xpath - составной оператор, использующий несколько атрибутов с частичным текстом - PullRequest
0 голосов
/ 13 марта 2020

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

Например, Строка A может выглядеть так: <a href='/someaddress' class='constantClassName' title='AlwaysPresentText - Row <somenumberhere_oneormoredigits> - TextIKnowAheadOfTime'>Edit</a>

В Chrome devtools У меня есть //a[@class='constantClassName' and contains(text(),'Edit') and starts-with(@title,'Edit')], что в основном и дает мне возможность.

То, что я не могу заставить работать, добавляется ends-with(@title,'TextIKnowAheadOfTime') на работу. В моем случае contains(text(),'sometext') может возвращать более одного результата, поэтому мне нужно точное совпадение.

Использование Java здесь, и было бы самым быстрым способом использовать регулярное выражение Java, объединенное с моей желаемой строкой на go, или есть способ запроса xpath для получения одного результата путем точного совпадения ends-with()?

1 Ответ

2 голосов
/ 13 марта 2020

В этом ответе SO говорится, что

По умолчанию selenium использует "нативную" версию XPath, поставляемую с браузером. Вы можете сделать это, используя версию, поставляемую с Selenium, написанную на JavaScript. Это похоже на реализацию XPath 1.0, основанную на взгляде на источник.

Ответ старый, но даже сейчас браузеры не поддерживают XPath-2.0. Это важно, потому что fn:ends-with(...) является XPath-2.0 функцией .

Но вы можете эмулировать ее с помощью следующей комбинации XPath-1.0. Здесь . - это значение, которое нужно сравнить, а $ending - строка, с которой строка «заканчивается».

substring(., string-length(.) - string-length($ending) + 1) = $ending

Применимо к вашей ситуации, эквивалент XPath-1.0 для

ends-with(@title,'TextIKnowAheadOfTime')

- это

substring(@title, string-length(@title) - string-length('TextIKnowAheadOfTime') + 1) = 'TextIKnowAheadOfTime'

Полагаю, теперь вы можете настроить выражение так, чтобы оно соответствовало нужным узлам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...