Случай селектора CSS для атрибутов
Если у меня есть элемент HTML селектор css должен быть чувствителен к регистру:
input[value='Search']
соответствует
input[value='search']
не соответствует
- Selenium IE WebDriver работает только при отладке
- Как выбрать / получить раскрывающийся список в Selenium 2
- Замените неявное ожидание с явным ожиданием (selenium webdriver & java)
- Selenium: Как остановить процесс geckodriver, влияющий на память ПК, не вызывая driver.quit ()?
- Как я могу подключиться к браузеру, открытому webdriver с seleniumом?
Мне нужно решение, в котором работает подход, не учитывающий регистр. Я использую Selenium 2 и JQuery , поэтому ответы для обоих приветствуются.
- Может ли Selenium взаимодействовать с существующим сеансом браузера?
- WebDriver - дождитесь использования элемента с помощью Java
- WebDriver: проверьте, существует ли элемент?
- У нас есть какие-либо общие функции, чтобы проверить, полностью ли загружена страница в Selenium
- Имя пользователя и пароль аутентификации Windows Python не работает
- Как переключаться между кадрами в Selenium WebDriver с помощью Java
- Как сделать firefox без головы программно в Selenium с python?
- Разница между webdriver.firefox.marionette и webdriver.gecko.driver
Он теперь существует в CSS4, см. Этот ответ .
В противном случае для jQuery вы можете использовать …
$(':input[name]').filter(function() { return this.value.toLowerCase() == 'search'; });
jsFiddle .
Вы также можете сделать пользовательский селектор …
$.expr[':'].valueCaseInsensitive = function(node, stackIndex, properties){ return node.value.toLowerCase() == properties[3]; }; var searchInputs = $(':input:valueCaseInsensitive("Search")');
jsFiddle .
Пользовательский селектор немного перехитрит, если делать это один раз, но если вам нужно использовать его много раз в своем приложении, это может быть хорошей идеей.
Обновить
Возможно ли иметь такой пользовательский селектор для любого атрибута?
Конечно, посмотрите следующий пример. Это немного запутанный (синтаксис, такой как :input[value:toLowerCase="search"]
возможно, был более интуитивным), но он работает 🙂
$.expr[':'].attrCaseInsensitive = function(node, stackIndex, properties){ var args = properties[3].split(',').map(function(arg) { return arg.replace(/^\s*["']|["']\s*$/g, ''); }); return $(node).attr(args[0]).toLowerCase() == args[1]; }; var searchInputs = $('input:attrCaseInsensitive(value, "search")');
jsFiddle .
Вероятно, вы можете использовать eval()
чтобы сделать эту строку массивом, но я считаю, что сделать это таким образом более комфортным (и вы не будете случайно выполнять какой-либо код, который вы размещаете в своем селекторе).
Вместо этого я разделяю строку на ,
разделитель, а затем удаляет пробелы и "
каждую сторону каждого элемента массива». Обратите внимание, что внутри цитаты не будет обрабатываться буквально. Нет причин, по которым нужно требовать буквально, но вы всегда можете указать на эту возможность. Я оставлю это до вас. 🙂
Я не думаю, что map()
имеет лучшую поддержку браузера, поэтому вы можете эксплицитно перебирать массив args
или увеличивать объект Array
.
CSS4 (CSS Selector Level 4) добавляет поддержку для него:
input[value='search' i]
Это конец «i», который делает трюк.
Более широкое внедрение началось в середине 2016 года: Chrome (с версии v49), Firefox (с версии v47?), Opera и некоторые другие. IE not и Edge еще нет. См. «Могу ли я использовать» …
input[value='Search'] matches input[value='search' i] Also matches in latest browsers
Поддержка: версия: Chrome> = 49.0, Firefox (Gecko)> = 47.0, Safari> = 9
Вы не можете сделать это только с помощью селекторов, попробуйте:
$('input').filter(function() { return $(this).attr('value').toLowerCase() == 'search'; });