Подтвердить что ты не робот

Можно ли взаимодействовать со скрытыми элементами с капьябарой?

У меня есть поле файла, которое имеет opacity: 0 и перекрывает поддельную кнопку. Его обычная техника CSS для подделки своего рода кнопки "Загрузить", которая постоянно отображается в разных браузерах.

Capybara не позволяет мне называть attach_file на этом входе. Ошибка Selenium::WebDriver::Error::ElementNotVisibleError: Element is not currently visible and so may not be interacted with.

Кто-нибудь знает, как заставить capybara взаимодействовать с невидимыми элементами?

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

  page.execute_script %Q{
    $('#photos').css({opacity: 1, transform: 'none'});
  }

Я отправлю его для записи.

4b9b3361

Ответ 1

Вы можете взаимодействовать со скрытыми элементами, используя свойство visible: false в Capybara.

Если вы хотите нажать на скрытый элемент, используйте:

find("#photos", visible: false).click

Не используйте click_button('#photo') напрямую

Ответ 3

В целом взаимодействие с невидимыми элементами не должно быть возможным при использовании Capybara (вы можете найти их, используя опцию visible: false/hidden в большинстве искателей, но на самом деле ничего не делайте с ними). Тем не менее, вход в файл является особым случаем из-за того, насколько распространенным является скрытие элемента и из-за ограничений безопасности нет другого способа фактически добавить файл, взаимодействуя со страницами видимыми элементами. Из-за этого attach_file имеет параметр make_visible, который может быть использован для того, чтобы Capybara сделал элемент видимым, прикрепите файл, а затем reset CSS к исходному параметру.

attach_file('photos', file_path, make_visible: true)

Ответ 4

Я сделал это таким образом с элементами, которые имеют стиль CSS display:none;:

page.execute_script("$('.all-hidden-elements').show();");
all('.all-hidden-elements').first.click

Ответ 5

Микель, спасибо за workaraund.

У меня есть аналогичная проблема для взаимодействия со скрытым вводом файлов на С# -связывание для Selenium Webdriver 2.35 и Firefox 24. Для того, чтобы сделать работу с файлами, сделал подобный трюк:

((IJavaScriptExecutor)webdriver).ExecuteScript("$('#fileUploadInput').css({opacity: 1, transform: 'none'});");

IWebElement e = webdriver.FindElement(By.CssSelector("input#fileUploadInput")));

e.SendKeys("c:\\temp\\inputfile.txt");

Ответ 6

В итоге я решил другой маршрут.

execute_script() давал мне трудное время (это заморозило бы выполнение теста на FireFox), так вот что я сделал:

У меня уже был соответствующий файл javascript. Я добавил следующие

<% if ENV["RAILS_ENV"] == "test" %>
  $('#photos').show()
<% end %>

Мне также пришлось добавить .erb в свой файл javascript для правильной обработки Rails-ресурсов.

И в моем тестовом файле я уже установил ENV["RAILS_ENV"] = "test"

Таким образом, я мог бы просто опустить пользовательский интерфейс для тестирования, но при этом поддерживать внешний вид и производительность.

Ответ 7

Если скрытый элемент вложен в видимый родительский элемент (например, скрытый ввод внутри видимой метки), вы можете щелкнуть на родительском элементе. Если вы все еще хотите найти вход по идентификатору, вы можете перейти к родительскому элементу так:

find('#hidden_input').find(:xpath, '..').click