2016-04-12 7 views
2

У меня вопрос, который уже связан с этой проблемой, но этот вопрос подходит для другого подхода.Замена текста регулярным выражением Ruby Capybara

У меня есть строка текста на веб-странице, которая производит включает временную метку (hhmmss) после завершения транзакции.

Я не могу использовать Time.now, так как время обработки варьируется в зависимости от многих факторов.

Текст на странице:

"Your transaction reference number is: 0 16123 (timestamp is here) A1" 

Я буду искать внутри элемента, чтобы прочитать текст в моем тесте с:

expect(find(location)).to have_text trans_text 

Могу ли я установить расположение текста в качестве переменной :

trans_text = find(location, text: 'Your transaction reference number is: 0 16123 (timestamp is here) A1') 

затем заменить временную метку регулярным выражением, а затем ожидать, чтобы временная метка была между двумя раз?

Я пробовал делать:

trans_text = find(location, text: 'Your transaction reference number is: 0 16123 (\d+) A1') 

Но не было никакой радости. Я получаю следующую ошибку:

Unable to find css "#main > div > div.section-content > div.two-col.retention-success > div.second-col > div.alert-complete > p" with text "Your retention certificate number is: 0 16123 (/d+) A1". 

Как я могу ввести регулярное выражение, чтобы заменить часть метки времени текста?

Благодаря

+0

Wh в формате это метка времени, можете ли вы привести пример? Попробуйте '(\ w +)' вместо '(\ d +)' или даже '(. * +)' – Druzion

+0

Формат (hhmmss). «Ваш ссылочный номер транзакции: 0 16123 120000 A1 ')». strftime будет ('% H% M% S') – Tom

+0

Я отредактировал, чтобы добавить показать ошибку, которую я получаю – Tom

ответ

0

Согласно Capybara documentation:

text (String, Regexp) — Only find elements which contain this text or match this regexp

Вы должны искать с помощью регулярного выражения (вместо строки):

find('p', text: /Your transaction reference number is: 0 16123 (\d+) A1/) 

Или проверка на один шаг:

expect(page).to have_text /Your transaction reference number is: 0 16123 (\d+) A1/ 
+0

@Tom это помогает? –

Смежные вопросы