【问题标题】:Selenium::WebDriver::Error - Drag and drop action using WATIRSelenium::WebDriver::Error - 使用 WATIR 进行拖放操作
【发布时间】: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


【解决方案1】:

该错误是由 geckodriver 0.22 https://github.com/mozilla/geckodriver/issues/1375 中的错误引起的

尝试降级 geckodriver 看看是否可行。

Watir 有一个直接的方法:

draggable.drag_and_drop_on droppable

【讨论】:

  • 感谢您的回复-我们实际上尝试了drag_and_drop_on 方法一段时间-似乎没有产生任何错误或任何结果(我已编辑问题以包含此示例)。关于为什么会出现这种情况的任何想法?
  • 如果你得到的东西在没有 watir 方法的情况下工作并且 watir 方法不起作用,你能告诉我吗? Watir 方法应该执行您需要的 Selenium 调用,而无需处理 action 类。
  • 对于最近的测试(添加到上面的问题),我们使用了您在答案中提到的完全相同的代码(不引用操作类):target.drag_and_drop_on destination。不幸的是,这似乎对我们不起作用 - 它没有完成拖放操作,也不会引发任何错误。
  • 在 Chrome 上运行测试时也会出现同样的情况(缺少结果)。
  • 你能用Selenium::WebDriver.logger.level = :debug 运行它并链接到结果的要点吗?
猜你喜欢
  • 2016-12-15
  • 2012-04-05
  • 1970-01-01
  • 2017-12-13
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多