Как посчитать количество символов в текстовом поле с помощью ruby - PullRequest
0 голосов
/ 12 января 2012

Я пишу набор тестов с Capybara, и мне нужно проверить длину текстового поля в Ruby.Он имеет ограничение в 255 символов.Как только предел достигнут, вы не можете больше печатать.Так что я ищу, чтобы подсчитать количество символов, которое было введено в текстовое поле, чтобы убедиться, что оно не превышает 255 символов.Это делается в Ruby (я только начал изучать код, так что все новое для меня, любая помощь будет отличной)./ div [7]

Я много исследовал, и весь код, который я могу найти, - это как создать текстовое поле и установить ограничение на количество символов, но я ищу код, который может это проверить.оно работает.

Материал, который я нашел как a.count или content.count, но я не могу заставить его работать.

Любая помощь будет принята с благодарностью.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 12 января 2012

Ruby-код может помочь вам создать нужное текстовое поле, но он не будет отслеживать, как его использует пользователь - по крайней мере, напрямую. Это работа браузера и JavaScript, который вы пишете, чтобы перехватывать события браузера. И да, вы можете отлавливать каждое нажатие клавиши и отправлять результат обратно на ваш сервер с помощью AJAX, чтобы вы могли обработать его в ruby, но зачем вам это делать?

То, что вам, вероятно, нужно, - это помощник ruby, который может сгенерировать некоторый html, чтобы сообщить браузеру ограничить ввод текстового поля определенным числом.

Что-то вроде этого, возможно:

<%= text_box 'some_model', 'some_attribute' , :maxlength=>"255" %>

Для text_area что-то вроде этого:

<%= text_area 'some_model', 'some_attribute', 
  :onchange => "if (this.value.length > 255){ this.value = this.value.substr(0,255); }" %>

Или, что еще лучше, поместите этот javascript в вспомогательный файл .js и добавьте его, используя jQuery или тому подобное.

ОБНОВЛЕНО

Чтобы проверить длину содержимого, используя RSpec / capybara с предоставленным вами селектором xpath:

find(:xpath, "/html/body/div[4]/div[2]/div[7]/textbox").value.length.should_be 255
0 голосов
/ 13 июля 2017

Вот что у меня сработало

    expect(find('#element_id').value.length).to eq(255)
0 голосов
/ 02 ноября 2015

Я очень поздно вхожу в это, поскольку я искал подобное решение.В конце концов я придумал:

max_length = first(selector here).value

if max_length.length > 255
    puts 'Limit exceeds 255 characters - error'
else
    puts 'Limit is 255 characters - pass'
    end 
end

Это подсчитало символы и вывело мне правильное сообщение на консоль.Вы можете изменить то, что выводится на консоль, в соответствии с вашим тестом.

Или вы можете упростить это, используя:

max_length = first(selector here).value

    expect(max_length.length). to eq 255
end
...