我们有一个使用JQuery UI Sortable的可排序列表,我们正在尝试使用Selenium进行自动化。
看起来dragAndDrop函数应该可以工作,但是当我们调用它时,UI不会改变。但是,如果我们用firebug查看DOM,我们会看到列表元素DID的顺序发生了变化。它似乎只是不刷新的UI。
知道如何让它发挥作用吗?
答案 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)
答案 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)
我很惊讶,鉴于上述评论它很容易,但我想事情已有所改善。