【发布时间】:2018-11-22 00:35:09
【问题描述】:
我们正在尝试使用 WATIR 模拟拖放操作,但是,我们似乎得到了一些奇怪的错误作为回报。
首先,我们存储“拖动项”及其目的地:
drag = @browser.trs(:draggable => 'true')
drop = drag[0]
destination = drag[1]
我们运行组合鼠标事件的第一个测试:
drop.fire_event("onmousedown")
@browser.driver.action.click_and_hold(drop).perform
@browser.driver.action.move_to(destination).click.perform
drop.fire_event("onmouseup")
我们运行的第二个测试使用了拖放方法:
@browser.driver.action.drag_and_drop_by(drop, 0, 500).perform
但是,两次尝试都会导致相同的错误:
Selenium::WebDriver::Error::InvalidArgumentError: data did not match any variant of untagged enum PointerActionItem at line 1 column 225
./features/W1-Administering_a_Shotlist/W1.1-Shotlists/step_definitions/W1.1.4-Reorder_Shotlist.rb:10:in `/^SA drag the selected shotlist to reorder$/'
./features/W1-Administering_a_Shotlist/W1.1-Shotlists/W1.1.4-Reorder_Shotlist.feature:9:in `When SA drag the selected shotlist to reorder'
我们认为此错误与两种方法中的 @browser.driver.action. 引用有关,但不确定如何解决此问题。
欢迎任何建议!
2018 年 11 月 26 日编辑
根据以下建议,我们使用以下代码尝试了drag_and_drop_on 方法:
draggable = @browser.trs(:draggable => 'true')
target = draggable[0]
destination = draggable[1]
target.drag_and_drop_on destination
sleep(5)
虽然这没有产生错误,但似乎也没有产生任何结果(即将target 元素移动到destination 元素的位置)。
【问题讨论】:
-
您可能需要仔细检查您是否传递了正确的参数。从示例中,您的
drop可能是String(即drop = drop.text)或Watir::Element。 Selenium 方法需要Selenium::WebDriver::Element。使用@titusfortner 的答案会简化很多,因为您可以坚持使用Watir::Element。 -
@JustinKo 抱歉,这只是格式化此问题的代码时的拼写错误(已在上面修复)
标签: firefox selenium-webdriver drag-and-drop automated-tests watir