Rieles, Carpincho. No se puede marcar el elemento de casilla de verificación

Resuelto masyuko0222 asked hace 10 meses • 0 respuestas

El siguiente es Slim.

.checkboxes__item
  = f.check_box :insert_thumbnail, { checked: @article.new_record? || @article.insert_thumbnail, class: 'a-toggle-checkbox' }
  = f.label :insert_thumbnail, 'insert thumbnail?'

HTML

<input name="article[insert_thumbnail]" type="hidden" value="0">
<input class="a-toggle-checkbox" 
       type="checkbox" 
       value="1" 
       checked="checked" 
       name="article[insert_thumbnail]" 
       id="article_insert_thumbnail">
<label for="article_insert_thumbnail">insert thumbnail?</label>
</div>

Me gustaría marcar esta casilla en la prueba E2E, pero no funciona.

check 'insert thumbnail?', visible: false
Error:
ArticlesTest#test_uncheck_checkbox_whether_to_display_thumbnail_in_body:
Selenium::WebDriver::Error::ElementNotInteractableError: element not interactable
  (Session info: headless chrome=117.0.5938.62)
    test/system/articles_test.rb:292:in `block in <class:ArticlesTest>'

Entiendo que este error significa que el elemento existe pero no se puede manipular.

¿Esto se debe a CSS? ¿O debería simplemente pasar una opción que no sea visible para el método de verificación?

.a-toggle-checkbox
  +size(0)
  display: block
  +position(fixed, left 0)
  opacity: 0
  overflow: hidden
  visibility: hidden
  • Establece la opción visible en verdadero
uncheck 'insert thumbnail?', visible: true
Error:
ArticlesTest#test_uncheck_checkbox_whether_to_display_thumbnail_in_body:
Capybara::ElementNotFound: Unable to find visible checkbox "insert thumbnail?" that is not disabled
    test/system/articles_test.rb:292:in `block in <class:ArticlesTest>'
  • Desplácese hasta
scroll_to 'insert thumbnail?'
uncheck 'insert thumbnail?', visible: false
  • buscar + hacer clic
find('label[for=article_insert_thumbnail]').click

=> Puedo hacer clic, pero quiero usar check/uncheckel método.

masyuko0222 avatar Feb 16 '24 23:02 masyuko0222
Aceptado

Debido al hecho de que sus casillas de verificación no están visibles y está apuntando al elemento de etiqueta con su selector, creo que solo necesita habilitar la automatic_label_clickopción.

Si intentará hacer clic en el elemento <label> asociado si la casilla Element#choosede verificación/botón de opción no está visible.Element#checkElement#uncheck

Capybara.configure do |config|
   config.automatic_label_click = true
end

O pasar esa opción explícitamente al checkmétodo, por ejemplo

check 'insert thumbnail?', allow_label_click: true

Aquí está el método real, que tiene un intento secundario si esta opción es verdadera y el error es "detectable", como ocurre en su caso ( consulte a continuación ).

Esto luego buscará la etiqueta y llamará a hacer clic (lo que parece funcionar para usted ahora)

def _check_with_label(selector, checked, locator,
                            allow_label_click: session_options.automatic_label_click, **options)
  options[:allow_self] = true if locator.nil?
  synchronize(Capybara::Queries::BaseQuery.wait(options, session_options.default_max_wait_time)) do
    el = find(selector, locator, **options)
    el.set(checked)
  rescue StandardError => e
    raise unless allow_label_click && catch_error?(e)

    begin
      el ||= find(selector, locator, **options.merge(visible: :all))
      unless el.checked? == checked
        el.session
          .find(:label, for: el, visible: true, match: :first)
          .click(**(Hash.try_convert(allow_label_click) || {}))
      end
    rescue StandardError # swallow extra errors - raise original
      raise e
    end
  end
end

Como referencia, los "Errores detectables" ( catch_error?(e) #=> true) en este caso serían:

Selenium::WebDriver::Error::StaleElementReferenceError
Selenium::WebDriver::Error::ElementNotInteractableError
Selenium::WebDriver::Error::InvalidSelectorError
Selenium::WebDriver::Error::ElementClickInterceptedError
Selenium::WebDriver::Error::NoSuchElementError 
Selenium::WebDriver::Error::InvalidArgumentError
Capybara::ElementNotFound
engineersmnky avatar Feb 16 '2024 16:02 engineersmnky