Использование функций xpath в верхнем и нижнем регистрах в Selenium IDE

Я пытаюсь получить запрос xpath с помощью функции xpath lower-case или upper-case, но они, похоже, не работают в селене (где я проверяю свой xpath, прежде чем применять его).

Пример, который НЕ работает:

//*[.=upper-case('some text')]

У меня нет проблем с поиском нужных мне узлов сложным путем и даже с использованием агрегированных функций, если я не использую верхний и нижний регистр.

Кто-нибудь сталкивался с этим раньше? Имеет ли это смысл?

Спасибо.


person Aristotelis    schedule 26.10.2009    source источник
comment
Стоит отметить, что для людей, работающих с документами XSL, использование текстовых свойств CSS решает такие проблемы преобразования, как использование заглавных букв. Чтобы получить дополнительную информацию: w3schools.com/css/pr_text_text-transform.asp   -  person sid3k    schedule 08.06.2010


Ответы (2)


upper-case() и lower-case() - это функции XPath 2.0. Скорее всего, ваша платформа поддерживает только XPath 1.0.

Пытаться:

translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')

это способ сделать это с помощью XPath 1.0. К сожалению, для этого требуется знание алфавита, который используется в тексте. Для простого английского это, вероятно, сработает, но если вы ожидаете использовать символы с диакритическими знаками, не забудьте добавить их в список.


В большинстве сред вы используете XPath вне какого-либо основного языка и можете использовать возможности основного языка, чтобы обойти это ограничение XPath 1.0, предоставляя извне варианты строки поиска в верхнем и нижнем регистре для translate().

Показано на примере Python:

search = 'Some Text'
lc = search.lower()
uc = search.upper()

xpath = f"//p[contains(translate(., '{lc}', '{uc}'), '{uc}')]"

Это приведет к следующему выражению XPath:

//p[contains(translate(., 'some text', 'SOME TEXT'), 'SOME TEXT')]

который выполняет поиск без учета регистра и работает с произвольным поисковым текстом.

person Tomalak    schedule 26.10.2009
comment
Действительно, спасибо! К сожалению, это совсем не `` чистый '' ... :( (это еще больше усложнит некоторые из наших и без того сложных определений DSL в GenericFixture для Fitnesse). Кто-нибудь знает, когда selenium RC или Firefox (я не знаю, который один ответственный) примет XPath 2.0? - person Aristotelis; 27.10.2009
comment
Извините, но я понятия не имею. Я знаю, что это не чисто, но это лучшее, что вы получите с XPath 1.0. - person Tomalak; 28.10.2009
comment
@Aristotelis: Да, это кажется непонятным, но есть причина. XML - это Unicode, а не ASCII / английский. Итак, для использования заглавных букв необходимо знать о сопоставлениях. В XPath 2.0 добавлены сведения о сопоставлениях. - person ; 10.09.2010

Если вам понадобится верхний регистр в нескольких местах вашего xslt, вы можете определить переменные для нижнего и верхнего регистра, а затем использовать их в своей функции перевода везде. Это должно сделать ваш xslt намного чище.

Пример на XSL / XPATH: без верхнего -case в MSXML 4.0?

person SO User    schedule 31.12.2009