Làm cách nào để tôi có thể điền vào vùng CKEditor trong Capybara, giả sử tôi đang sử dụng trình điều khiển có khả năng javascript như capybara-webkit hoặc selenium?Làm thế nào để điền ckeditor từ capybara bằng trình điều khiển webkit hoặc selen
Trả lời
Lấy cảm hứng từ những gì tôi đã tìm thấy here, tôi đã đưa ra giải pháp sử dụng javascript để đặt cả dữ liệu trên ẩn textarea
và đối tượng CKEditor
. Dường như không đủ, tùy thuộc vào hoàn cảnh.
def fill_in_ckeditor(locator, opts)
content = opts.fetch(:with).to_json # convert to a safe javascript string
page.execute_script <<-SCRIPT
CKEDITOR.instances['#{locator}'].setData(#{content});
$('textarea##{locator}').text(#{content});
SCRIPT
end
# Example:
fill_in_ckeditor 'email_body', :with => 'This is my message!'
RSpec + Capybara hỗ trợ tập tin để làm việc với các trường hợp ckeditor
module Ckeditor
class Instance
attr_reader :capybara
private :capybara
def initialize(instance_id, capybara)
@instance_id, @capybara = instance_id, capybara
end
def val(value)
capybara.execute_script "jQuery('textarea##{@instance_id}').val('#{value}')"
end
def reload_all
capybara.execute_script "for(var instance in CKEDITOR.instances) { if(CKEDITOR.instances.hasOwnProperty(instance)) {CKEDITOR.instances[instance].destroy(true);} }"
capybara.execute_script "CKEDITOR.replaceAll();"
end
end
end
# usage
# rte = Ckeditor::Instance.new(:my_instance_id, page)
# rte.val 'foo'
# rte.reload_all
# NOTE: page is provided by Capybara
Một bổ sung nhỏ để Marc-André's awesome answer
Nếu bạn đang sử dụng hình thức lồng nhau hoặc nhiều textareas trong cùng ID được tạo trang khá xấu và khó viết vào các bài kiểm tra (ví dụ: person_translations_attributes_2_biography
) với phần bổ sung nhỏ này để hi s phương pháp bạn có thể xác định vị trí ckeditors sử dụng nhãn của họ thay vì ID
# Used to fill ckeditor fields
# @param [String] locator label text for the textarea or textarea id
def fill_in_ckeditor(locator, params = {})
# Find out ckeditor id at runtime using its label
locator = find('label', text: locator)[:for] if page.has_css?('label', text: locator)
# Fill the editor content
page.execute_script <<-SCRIPT
var ckeditor = CKEDITOR.instances.#{locator}
ckeditor.setData('#{params[:with]}')
ckeditor.focus()
ckeditor.updateElement()
SCRIPT
end
Bằng cách này thay vì điều này
fill_in_ckeditor 'person_translations_attributes_2_biography', with: 'Some text'
bạn có thể viết này
fill_in_ckeditor 'Biography', with: 'Some text'
Tôi sắp viết một cái gì đó chính xác như thế này khi tôi đọc câu trả lời của Marc-André. Tôi rất vui vì đã tiếp tục đọc. Cảm ơn bạn! –
nếu bạn sử dụng ckeditor.updateElement() để đặt giá trị của phần tử văn bản ẩn (thay vì đặt trực tiếp bằng jquery, như trong câu trả lời của Marc-André), bạn có thể gặp phải các kiểm tra thất bại ngẫu nhiên, khi capybara không đợi js của bạn để hoàn thành việc thực thi. khi bạn thêm trang.nên có_field (định vị, với: params [: with], visible: false) capybara đợi cho đến khi phần tử văn bản ẩn có giá trị mong đợi. – wnm
Đối với tôi Marc-André's answer chuyển bối cảnh khung nội tuyến trong trình điều khiển webkit. Xem this capybara-webkit issue
tôi tìm thấy một cách khác để điền vào đầu vào ckeditor mà không thay đổi bối cảnh iframe:
def fill_in_ckeditor(id, with:)
within_frame find("#cke_#{id} iframe") do
find('body').base.send_keys with
end
end
và gọi nó là
fill_in_ckeditor 'comment', with: 'This is my message!'
trình cả với webkit và selen trình điều khiển
Lấy cảm hứng từ this post
- 1. Làm thế nào để điền vào trình soạn thảo tinymce-ray với capybara và selen?
- 2. Capybara-webkit tăng Capybara :: driver :: Webkit :: WebkitInvalidResponseError
- 3. không thể nhận capybara-webkit để làm việc
- 4. Trong mô-đun python, selen. làm thế nào để sử dụng trình điều khiển firefox
- 5. Khi chạy selen với capybara/rails, làm thế nào để cấu hình máy chủ?
- 6. Làm thế nào để cắt & điền bằng Paperclip (hoặc RMagick)?
- 7. vcr với capybara-webkit
- 8. Capybara: Làm thế nào để điền vào một trường nhập bằng ID của nó
- 9. Sử dụng trình điều khiển web selen để chạy thử nghiệm trên nhiều trình duyệt
- 10. Làm thế nào để thiết lập các tùy chọn ignore_ssl_errors cho Capybara Webkit trong spec_helper.rb
- 11. Làm thế nào để sử dụng UISearchDisplayController từ bộ điều khiển trong bộ điều khiển UITabBar?
- 12. Chạy thử nghiệm selen song song với Capybara
- 13. Làm thế nào để giao tiếp với trình điều khiển vi điều khiển Linux
- 14. Capybara-webkit cố gắng mở example.com
- 15. Cách đóng trình duyệt bằng Capybara?
- 16. Làm thế nào để chỉ định một Order hoặc Sort bằng cách sử dụng trình điều khiển C# cho MongoDB?
- 17. Làm thế nào để có một điều khiển điền tất cả các không gian có sẵn
- 18. Cơ sở dữ liệu hết giờ khi chạy RSpec/Capybara với trình điều khiển javascript
- 19. Làm thế nào để chuyển đổi chuỗi sang BSON bằng trình điều khiển MongoDB C++?
- 20. Có cách nào để gửi các lần nhấn phím tới Webkit bằng Capybara không?
- 21. Lỗi khi cài đặt gem capybara-webkit
- 22. dưa chuột, capybara & selen hoạt động ngẫu nhiên
- 23. Hiển thị phông chữ phông chữ @ trong Capybara-Webkit
- 24. Thử nghiệm với trình điều khiển selen trong Java mà không cần mở bất kỳ trình duyệt nào
- 25. Phím Selenium thả nhân vật bằng Trình điều khiển Chrome
- 26. LRI: Lỗi khi cài đặt capybara-webkit:
- 27. Làm cách nào để thay đổi trình điều khiển mặc định thử nghiệm cho thử nghiệm Dưa chuột ở Capybara?
- 28. Làm thế nào để gửi cookie với trình duyệt web selen?
- 29. Tạo quy trình từ trình điều khiển
- 30. Điều khiển kéo dài để điền vào ItemsControl
Cảm ơn bạn vì điều này, nó thực sự giúp tôi tiết kiệm rất nhiều thời gian. Một chỉnh sửa nhỏ: trong capybara 2.1.0, 'browser.execute_script' ở trên phải là' page.execute_script'. –
@BalintErdi: Đã sửa lỗi! –
phương pháp tuyệt vời tại đây. làm việc như một sự quyến rũ ... chỉ cần sao chép và dán. – nfriend21