Как проверить значение src и alt изображения с помощью капибары?

Я пытаюсь написать тест значения альтернативного текста + src изображения, используя капибару и селекторы css.

есть идеи протестировать оба в одном xpath?


person Shani    schedule 25.06.2011    source источник
comment
Возможный дубликат Проверка существования изображений и значков с помощью RSpec и Капибара   -  person G. I. Joe    schedule 13.01.2017


Ответы (5)


Чуть более простым способом будет использование идентификатора для этого изображения:

page.find('#profile-avatar')['src'].should have_content 'default.png'

Обновлено для rspec 3:

expect(page.find('#profile-avatar')['src']).to have_content 'default.png' expect(page.find('#profile-avatar')['alt']).to match(/some-value/)

person Paul Ardeleanu    schedule 23.06.2013
comment
imo это лучший способ пойти, потому что он использует css вместо уродливых xpaths - person shicholas; 20.11.2013
comment
альтернативная часть вопроса OP такая же, с «alt» для «src». - person traday; 12.05.2015
comment
модернизировано, я сделал: expect(page.find('#profile-avatar')['alt']).to have_content 'your_alt_text' - person traday; 12.05.2015

Вы можете проверить несколько атрибутов, используя xpath

assert page.has_xpath("//img[@src = 'some_value' and @alt='some_value']")
person Dipil    schedule 25.06.2011
comment
Это должно сказать //img вместо //image, чтобы работать на меня, но с внесенным изменением это помогло мне. Спасибо! - person Reb; 20.10.2013
comment
Правильная форма assert page.has_xpath?("//img[@alt='some_value' and @src = 'some_value']") - person João Paulo Motta; 13.03.2015

  1. Should немного устарел. Expect — это новый синтаксис ожидания RSpec.
  2. Разделение ожиданий в их собственных спецификациях является хорошей практикой.
  3. Личное предпочтение: я избегаю have_content, насколько это возможно, так как это не совсем проверяет значение атрибута, который мне нужен, а просто выполняет HaveText(*args). Это может привести к ложным срабатываниям.

before(:all) do
  @avatar_image = find('#profile-avatar')
end

it 'has correct src' do
  expect(@avatar_image[:src]).to eq("some_url")
end

it 'has correct alt text' do
  expect(@avatar_image[:alt]).to eq("some_text")
end
person Amir Shahheydari    schedule 18.04.2017

У меня были некоторые проблемы, потому что src моего изображения имел некоторые динамические значения, поэтому я сделал это:

find(locator+' img')['src'].include?(img_src).should be_true

Меня не волнует путь, просто если имя файла было правильным

person Victor Martins    schedule 01.09.2012

Он не отвечает прямо на ваш вопрос, но если некоторым людям нравится отладка по скорости, я бы предложил использовать этот синтаксис:

find(:xpath, "//img[@class='avatar']/@src").text.should match /some url/
find(:xpath, "//img[@class='avatar']/@alt").text.should match /some text/

так как ошибка будет более явной в случае сбоя. (на самом деле он будет отображать значение src и alt).

person adipasquale    schedule 22.02.2013