Как проверить ссылку mailto в огурце?

У меня есть такая ссылка:

‹ a href= "mailto:‹%= @email %>?subject=Ответить на жалобу&body=‹%= @salutation %>,">Ответить‹ /a>

Как я могу проверить это с помощью Cucumber/Capybara? Я имею в виду нечто большее, чем просто

И я должен увидеть "Ответ"


person Piotr Brudny    schedule 24.05.2012    source источник
comment
Что, на ваш взгляд, было бы достаточно? Что href ссылки содержит mailto на правильный адрес электронной почты?   -  person Jesse Wolgamott    schedule 24.05.2012
comment
На самом деле я не совсем уверен, что я должен тестировать. Я просто думаю, что «И я должен увидеть» недостаточно. Что вы думаете?   -  person Piotr Brudny    schedule 24.05.2012
comment
На мой взгляд, проверка того, что href содержит mailto:#{email}, хороша.   -  person Jesse Wolgamott    schedule 24.05.2012


Ответы (4)


Похоже, вы обеспокоены правильностью значений @email и @salutation в ссылках mailto:.

Вы можете сделать что-то вроде этого

page.should have_xpath("//a[contains(@href,email)]"))
person gmoore    schedule 24.05.2012

Я закончил с шагом огурца:

Then /^I should have a mailto link with:$/ do |table| 
  mailto_link = '//a[@href="mailto:' + table.rows_hash['recipient'] + '?subject=' + table.rows_hash['subject'] + '&body=' + table.rows_hash['body'] + ' "]'
  page.should have_xpath(mailto_link)
end
person Piotr Brudny    schedule 25.05.2012
comment
Вам нужно кодировать URL. ТАКЖЕ вы должны использовать XPATH contains() в случае, если параметры не в том же порядке - person Cyril Duchon-Doris; 30.09.2016

Дополнение к Piotr Brudny с URL encode и contains, поэтому порядок параметров не имеет значения (я убрал оттуда тело, но вы, наверное, разберетесь, если вам это нужно.

Then(/^I should have a mailto link with:$/) do |table|
  mailto_link = ("//a[contains(@href, \"mailto:#{table.rows_hash['recipient']}\")"\
  " and contains(@href, \""+ {
    subject: table.rows_hash['subject']
  }.to_query + '")]').gsub('+', '%20')
  page.should(have_xpath(mailto_link))
end
person Cyril Duchon-Doris    schedule 30.09.2016

Аналогично принятому ответу, но немного обновленный пример. Вы можете выразить это так:

expect(page).to have_xpath("//a[contains(@href,'mailto:[email protected]')]")
person Aleks    schedule 04.09.2017