Как получить массив значений атрибута xml, используя nokogiri в рельсах - PullRequest
0 голосов
/ 28 ноября 2011

Я пишу тесты в rspec rails.

На мой взгляд есть что-то вроде

<div id = "dataDiv" data-items= "[["A",100],["B",200],["C",50]]" data-check= "check">

Мне нужно проверить данные этого подразделения и использовать для этого xpath.

В моих спецификациях,

it should have_xpath('//div[@id="dataDiv"][@data-check="check"]')

отлично работает, но

it should have_xpath('//div[@id="dataDiv"][@data-items="[["A",100],["B",200],["C",50]]"]')

выдает ошибку, говорящую «ноль не может быть преобразован в строку».

Я попробовал следующее, чтобы получить значение атрибута

find.xpath('//div[@id="dataDiv"]/@data-items')

но это дает ту же ошибку, что и выше. Но у меня есть @data-items, когда я вижу в браузере.

Я использую рельсы 3.1 и nokogiri 1.4.4

Может ли кто-нибудь помочь мне, как получить это как массив?

1 Ответ

0 голосов
/ 28 ноября 2011

Похоже, у вас проблема с цитированием в HTML, поэтому ваш HTML недействителен. Вы не можете поместить необработанные двойные кавычки в атрибут двойных кавычек:

data-items="[["A",100],["B",200],["C",50]]"

То, что data-items не является допустимым атрибутом HTML, поэтому я не удивлен, что Нокогири не может его понять.

Попробуйте исправить свое представление, чтобы получить действительный HTML:

data-items="[['A',100],['B',200],['C',50]]"
data-items='[["A",100],["B",200],["C",50]]'

, а затем обновите свой XPath, чтобы он соответствовал используемой вами внутренней цитате.

Кроме того, эта часть вашего XPath испытывает похожие проблемы с цитированием:

[@data-items="[["A",100],["B",200],["C",50]]"]

так что вам тоже нужно это исправить:

have_xpath(%q{//div[@id="dataDiv"][@data-items='[["A",100],["B",200],["C",50]]']})
have_xpath('//div[@id="dataDiv"][@data-items=\'[["A",100],["B",200],["C",50]]\']')

или какой-то другой вариант той же идеи.

...