【问题标题】:Selenium Webdriver UnknownError: performActions (Ruby)Selenium Webdriver UnknownError: performActions (Ruby)
【发布时间】:2017-05-28 13:19:32
【问题描述】:

更新

我已经以更简单的方式复制了这个问题。

HTML:

<html>
<head>
  <script src="../../../libs/jquery-1.11.3.min.js"></script>
</head>
<body>
  <div id="abc" style="width:100px;height:100px;background-color:green;"></div>
  <script type="text/javascript">
  $("#abc").on('click', function() {
    alert('clicked');
  });
  </script>
</body>
</html>

红宝石:

require 'selenium-webdriver'

profile = Selenium::WebDriver::Firefox::Profile.new
options = {}
options[:profile] = profile
driver = Selenium::WebDriver.for :firefox, options
driver.manage.timeouts.implicit_wait = 10

driver.navigate.to("the_above_html_file")
driver.action.move_to(driver.find_element(:id, "abc")).click.perform

当 Ruby 运行时,JavaScript 警报没有按预期打开;相反,Ruby 会生成此堆栈跟踪:

"performActions"
/usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok': performActions (Selenium::WebDriver::Error::UnknownError)
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/w3c_bridge.rb:640:in `execute'
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/w3c_bridge.rb:417:in `send_actions'
    from /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/w3c_action_builder.rb:164:in `perform'
    from finder/tests/automated/test.rb:11:in `<main>'

为什么会失败?使用driver.find_element(:id, "id").click 定位元素按预期工作,因此它似乎与action 类有关。

使用 Webdriver 3.4.0 和 GeckoDriver 0.16.1 运行 Ruby 2.2.5。

原始帖子 - 不再相关

使用 Webdriver 3.4.0 和 GeckoDriver 0.16.1 运行 Ruby 2.2.5。

正在进行验收测试:

element = @driver.find_element(:class, "ui-slider-handle")
@driver.action.drag_and_drop_by(element, 50, 0).perform

element 是由 jQuery UI Sliders 创建的可移动滑块 - 请参阅 https://jqueryui.com/slider/。我们正在使用版本jquery-ui-1.11.4.custom/jquery-ui.min.js

当我手动使用滑块时,它可以正常工作,但验收测试会抛出:

TestDistanceSlider#test_store_container_and_markers_updated_when_slider_moved:
Selenium::WebDriver::Error::UnknownError: performActions
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:69:in `assert_ok'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/w3c_bridge.rb:640:in `execute'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/w3c_bridge.rb:417:in `send_actions'
    /usr/local/rvm/gems/ruby-2.2.5/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/w3c_action_builder.rb:164:in `perform'
    tests/automated/test_distance_slider.rb:18:in `_move_slider_by_percent'
    tests/automated/test_distance_slider.rb:24:in `_move_slider_to_top'
    tests/automated/test_distance_slider.rb:139:in `test_store_container_and_markers_updated_when_slider_moved'

我们如何诊断引发 Selenium::WebDriver::Error::UnknownError: performActions 的原因?

我们已经尝试过这种解决方法,但它给出了同样的错误:

 @driver.action.click_and_hold(element).move_by(100, 0).release.perform                                                             

【问题讨论】:

  • 嗨,当您决定使用 Ruby Selenium Binding 时,为什么不使用 WATIR,WATIR 是 Ruby Selenium Binding 的良好包装器。添加了许多额外的功能。

标签: ruby jquery-ui selenium-webdriver webdriver jquery-ui-slider


【解决方案1】:

最好的猜测是您正在使用一些旧版本的 geckodriver,因为操作类有错误并且最近已实现。

我试过你的例子,它就像一个魅力。这是它的屏幕截图。 Screenshot

规格:
火狐:53.0.4
壁虎司机:0.16.1
硒网络驱动程序:3.4.0

让我知道它是否适用于最新版本。
希望对你有帮助!!

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 2020-11-21
    • 2023-03-19
    • 2017-12-13
    • 2012-07-31
    • 2016-04-05
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多