Капибара/полтергейст: селектор атрибутов CSS вызывает синтаксическую ошибку

Я использую Capybara 2.3 с Poltergeist (на Rails) и столкнулся с проблемой при вызове has_selector с селектором CSS, который включает значение атрибута. Например:

page.has_selector? "select#select_id option[value!='1']"

приводит к следующей ошибке:

Capybara::Poltergeist::InvalidSelector: The browser raised a syntax error while trying to evaluate css selector "select#select_id option[value!='1']"

Поскольку я использую оператор '!=', я не могу использовать параметр 'args' для 'has_selector?' (или можно?)

Любые идеи?

Заранее спасибо :)


person kobibi    schedule 29.06.2014    source источник


Ответы (1)


!= не является допустимым компаратором атрибутов CSS (по крайней мере, в Chrome). Возможно, вы захотите попробовать

page.has_selector? "select#select_id option:not([value='1'])"

Вы можете добиться того же с помощью псевдокласса :not.

person Artjom B.    schedule 29.06.2014
comment
Интересно - PhantomJS не сообщает != как ошибку, даже если вокруг него есть пробелы. - person Dave Schweisguth; 29.06.2014
comment
@DaveSchweisguth Попробуйте этот скрипт. Вы видите ошибку? Я делаю, и я на Win7 с phantomjs 1.9.7-9. - person Artjom B.; 29.06.2014
comment
Да! Похоже что-то в Капибаре или полтергейсте реализует или съедает !=. Краткое исследование показывает, что Capybara много обрабатывает селектор, возможно, поэтому. - person Dave Schweisguth; 29.06.2014
comment
@Dave Schweisguth: Это недопустимый селектор CSS, и точка. Если это принимается, то соответствующая реализация, вероятно, просто делает свое дело. - person BoltClock; 30.06.2014
comment
Кроме того, :not() — это не псевдоэлемент, а псевдокласс. - person BoltClock; 30.06.2014
comment
@BoltClock Спасибо, я изменил это. Я не знаю, что там произошло. - person Artjom B.; 30.06.2014