Капибара 'drag & drop' не работает - PullRequest
9 голосов
/ 17 октября 2011

Я использую огурец / капибара / селен / Firefox на Mac.Все работает отлично, за исключением D & D.Перетаскивание доступно через drag_node.drag_to(drop_node).Когда вызвано, это не вызывает никаких ошибок, но фактическое перетаскивание просто никогда не происходит.

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

Google, однако, не знает о том, что drag_to() будет сломан.Насколько я мог видеть.Это дает надежду, что я что-то упустил, а не ошибка.Так что же это?Что мне не хватает?Баг?

Ответы [ 4 ]

7 голосов
/ 11 мая 2016

Для меня #drag_to сработало, однако его возможности, по-видимому, ограничены.

Чтобы переместить строку таблицы, сортируемую по интерфейсу пользователя, мне нужно было создать таблицу из трех строк, затемзапустите этот код (на шаге Cucumber):

element = find('tbody tr:nth-child(1)')
target = find('tbody tr:nth-child(3)')

element.drag_to target

Это поменяет местами первый и второй ряд.Моя интерпретация заключается в том, что Капибара недостаточно тянет, поэтому я поставил ей цель, превышающую мою фактическую цель.

Примечание: я настроил сортировку пользовательского интерфейса с помощью tolerance: 'pointer '.

4 голосов
/ 01 марта 2012

У меня возникла та же проблема, и я решил ее, перейдя непосредственно к selenium-webdriver.

Я использую selenium-webdriver 2.20.0 и Capybara 1.1.2

, с которыми работаетэтот HTML

<!DOCTYPE html>
<html>
  <head>
    <title>Cabybara Drag And Drop</title>
    </style>
    <style type="text/css" media="screen">
      #list_1 { background:#2C4999; }
      #list_2 { background:#99752A; }
      .list { padding:10px; width:200px; }
      .item { background:#FFF; margin:10px; }
    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>

    <script type="text/javascript">
      $().ready(function(){
        $( "#list_1" ).sortable({ connectWith:"#list_2" });
        $( "#list_2" ).sortable({ connectWith:"#list_1" });
      });
    </script>
  </head>
  <body>
    <ol id='list_1' class='list'>
      <li id='item_1' class='item'>Item 1</li>
      <li id='item_2' class='item'>Item 2</li>
      <li id='item_3' class='item'>Item 3</li>
      <li id='item_4' class='item'>Item 4</li>
      <li id='item_5' class='item'>Item 5</li>
    </ol>
    <ol id='list_2' class='list'>
      <li id='item_6' class='item'>Item 6</li>
      <li id='item_7' class='item'>Item 7</li>
      <li id='item_8' class='item'>Item 8</li>
      <li id='item_9' class='item'>Item 9</li>
      <li id='item_10' class='item'>Item 10</li>
    </ol>

  </body>
</html>

Теперь перед кодом Ruby.Как добраться до селена-вебдрайвера из капибары, позвоните page.driver.browser

require 'test_helper'

class DragDropTest < ActionDispatch::IntegrationTest
  setup do
    Capybara.current_driver = Capybara.javascript_driver # :selenium by default
  end

  def test_drag_item_1_to_list_2
    visit '/drag_drop'
    element = page.find(:id, 'item_1')
    target  = page.find(:id, 'list_2')

    selenium_webdriver = page.driver.browser
    selenium_webdriver.mouse.down(element.native)
    selenium_webdriver.mouse.move_to(target.native, 0, 10)
    selenium_webdriver.mouse.up
    sleep 2
  end
end
1 голос
/ 14 ноября 2015

#drag_to не работает с сортируемыми списками, по-видимому, так как вы не перетаскиваете «на» элемент столько, сколько перетаскиваете заданное расстояние и направление.#drag_by Selenium - это то, что вы ищете, но в настоящее время не поддерживается Capybara.

См. Также:

https://github.com/jnicklas/capybara/issues/222

https://github.com/jnicklas/capybara/issues/119

1 голос
/ 21 марта 2012

Это селен-вебдрайвер, имеющий проблемы с сортируемыми списками.Этот пост охватывает обходной путь: http://www.dixis.com/?p=626

...