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

Я пытаюсь записать тестовое значение alt text + src изображения с помощью capybara и селекторов css.

любая идея s для проверки как в одиночном xpath?

Ответы

Ответ 1

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

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/)

Ответ 2

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

assert page.has_xpath("//image[@alt='some_value' and @src = 'some_value']")

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

  • Should немного устарел. Expect - новый синтаксис ожидания RSpec.
  • Разделение ожиданий в их собственных спецификациях - хорошая практика.
  • Личные предпочтения: я избегаю 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