Как заполнить редактор tinymce-rails капибарой и селеном?

У меня есть проблема с использованием capybara для тестирования формы tinymce. Я использую tinymce-rails и имеет 7 редакторов в моей форме. Также я использую плагин asciimath с тинимом.

Все работает отлично, но я не могу написать тесты для заполнения редактора tinymce.

Вот как выглядит мой код определения шага, очень похожий на то, что описано здесь:

within_frame("content_ifr") do
  editor = page.find_by_id('tinymce')
  editor.native.send_keys 'test'
end

Проблема заключается в том, что я запускаю следующее:

editor.native.clear            # works, clear the editor area, I'm testing this with pry
editor.native.send_keys :tab   # works, moves focus to next input
editor.native.send_keys 'test' # returns "", nothing happens, nothing in editor

Итак clear и send_keys :tab работают как ожидалось. Но я не могу отправить ничью. send_keys функция всегда возвращает пустую строку, и ничего не происходит, когда я тестирую с помощью pry.

Что здесь происходит? и как я могу отлаживать/исследовать проблему?

Спасибо.

Ответ 1

Переключение на хром, как описано здесь решило мою проблему.

Очевидно, проблема связана с ошибкой в ​​драйвере firefox.

Тем не менее, я считаю, что это правильный вопрос для firefox.

Ответ 2

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

Хотя в первоначальном вопросе говорилось, что на одной странице у него есть 7 оттенков, я думаю, что мое решение может сработать и для него, но я знаю, что оно будет работать, если есть одно совпадение, как было в моем случае.

В моей спецификации запроса я использовал это:

page.execute_script('$(tinymce.editors[0].setContent("my content here"))')

page.execute_script с page.execute_script запустить функцию jQuery. Затем он находит первый редактор tincymce и устанавливает содержимое.

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

Ответ 3

Попробуйте переключиться на iframe, содержащий входной файл tinymce textarea, а не send_keys:

# +session+ is an instance of Capybara::Session class
browser = session.driver.browser
browser.switch_to.frame(iframe_id)
editor.native.send_keys(text)
browser.switch_to.default_content

Ответ 4

Я была такая же проблема. После дня борьбы мои тесты наконец прошли.

Код, который я использую:

within_frame("producto_condiciones_ifr") do
  editor = page.find_by_id('tinymce')
  editor.native.send_keys 'filling text'
end

Первая строка - это метод капибары. Переданный параметр является идентификатором iframe.

Строка № 2 является обязательным.

В строке № 3 идет текст, который вы хотите поместить в TinyMCE