我试图在网页的某些坐标处实现点击,拖动和释放,无头地使用Capybara。目标是包含日历的元素,日历通过ajax响应鼠标事件。通过单击,拖动和释放添加计划。我尝试了两种方法:
方法1
driver.browser.action.move_to(native).move_by(x1, y1).click_and_hold.perform
driver.browser.action.move_to(native).move_by(x2, y2).release.perform
方法1的问题:根据屏幕截图没有发生任何事情。
方法2
{{1}}
方法2的问题: click_and_hold始终以元素的中心为目标。
在这种情况下如何实现点击和拖动的任何想法?
答案 0 :(得分:2)
你应该使用capybara的drag_to
方法
source = page.find('#foo')
target = page.find('#bar')
source.drag_to(target)
更多信息:http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FNode%2FElement%3Adrag_to
答案 1 :(得分:1)
当您发现Capybara十字驱动程序时,drag_to将一个元素的中间拖到另一个元素的中间。由于这不能满足您的需求,您必须特定于驾驶员 - 在您的情况下,您已经指出了硒。 #click_and_hold只应点击一个元素的中间,如果你传递一个元素,你不会。采用方法1操作并转换为方法2样式,以下内容应该可以执行您想要的操作
cal = find(:xpath, "//div[@class='dhx_cal_container']")
page.driver.browser.action.move_to(cal.native, 240, 250).
click_and_hold.
move_to(cal.native, 240, 400).
release.
perform
传递给move_to的偏移量来自cal.native元素的左上角。看起来奇怪的是,UI的行为只是拖动容器并将其丢弃一些偏移量,而不是基于任何其他元素的位置。你确定你真的想要根据容器选择位置,而不是在容器内拖动元素吗?
答案 2 :(得分:0)
我的理解是,您需要的是一些东西,而不仅仅是移动元素的中间部分。 Selenium的draganddropby
动作会成功吗?它允许您设置x,y偏移坐标。