如何使用Selenium测试JQuery UI可排序小部件?

时间:2010-11-16 14:45:41

标签: jquery-ui drag-and-drop selenium jquery-ui-sortable ui-automation

我们有一个使用JQuery UI Sortable的可排序列表,我们正在尝试使用Selenium进行自动化。

看起来dragAndDrop函数应该可以工作,但是当我们调用它时,UI不会改变。但是,如果我们用firebug查看DOM,我们会看到列表元素DID的顺序发生了变化。它似乎只是不刷新的UI。

知道如何让它发挥作用吗?

5 个答案:

答案 0 :(得分:3)

尝试使用dragAndDropToObject。我只能使用Se-IDE移动东西(虽然我怀疑Se-RC也能正常工作)。

dragAndDropToObject | css = div [class = demo]> ul> li:nth(2)| css = div [class = demo]> ul>利:第n(5)

答案 1 :(得分:2)

我们找不到任何解决方案,所以我们只需创建帮助javascript函数,使用jQuery移动html元素。它适用于我们的情况,但感觉很脏!

答案 2 :(得分:2)

我已经开发了一个JQuery插件来解决这个问题,请查看jquery.simulate.drag-sortable.js,其中包含一个插件以及一套测试。

希望你觉得这很有用!欢迎提供反馈。

马特

答案 3 :(得分:0)

以下是我发现的与Selenium和Capybara的合作

# Move a row at index start_index to end_index
def move(start_index, end_index)
  row = sortable_row(start_index)

  # We are not using Capybara drag_to here as it won't work properly in dragging first and last elements,
  # and also is a bit unpredictable whether it will drop before or after an element
  move_amount = ((end_index - start_index)*row_height).to_i
  # Move a little more than the explicit amount in each direction to be certain 
  # that we land in the correct spot
  move_amount_sign = (move_amount >= 0) ? 1 : -1
  move_amount = move_amount + move_amount_sign*(row_height * 0.25).to_i
  @session.driver.browser.action.drag_and_drop_by(row.native, 0, move_amount).perform
end

# Get the height of a row for sorting
def row_height(refresh=false)
  @row_height = nil unless @row_height || refresh
  unless @row_height
    @row_height = @session.evaluate_script("$('.my-sortable-row').height()")
  end
end

答案 4 :(得分:0)

这里2017年有4个角1x,使用2种不同驱动程序的水豚硒测试:poltergeist和chrome,我能够让内置的水豚drag_to开箱即用。我不会说它是100%可靠的,它拖拽的东西,但拖东西拖延,所以这是一个惊喜。我还有一个Julie's answer的修改版本可以在chrome中使用,但不是使用poltergeist(没有driver.browser.action ...不确定如果有一个poltergeist版本是什么的话。)

所以无论如何:

element = page.find_all('.draggable_thing')[0]
target = page.find_all('.droppable_thing')[3]
element.drag_to(target)

我很惊讶,鉴于上述评论它很容易,但我想事情已有所改善。