首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium Webdriver : performActions (Ruby)

Selenium Webdriver : performActions (Ruby)
EN

Stack Overflow用户
提问于 2017-05-28 13:19:32
回答 1查看 221关注 0票数 0

更新

从那以后,我以一种更简单的方式复制了这个问题。

HTML:

代码语言:javascript
复制
<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>

红宝石:

代码语言:javascript
复制
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会生成这个堆栈跟踪:

代码语言:javascript
复制
"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类相关。

使用WebDriver3.4.0和GeckoDriver 0.16.1运行Ruby2.2.5。

原始帖子-不再相关的

使用WebDriver3.4.0和GeckoDriver 0.16.1运行Ruby2.2.5。

验收测试正在进行:

代码语言:javascript
复制
element = @driver.find_element(:class, "ui-slider-handle")
@driver.action.drag_and_drop_by(element, 50, 0).perform

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

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

代码语言:javascript
复制
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的原因?

我们已经尝试过这个解决方法,但是它也会产生同样的错误:

代码语言:javascript
复制
 @driver.action.click_and_hold(element).move_by(100, 0).release.perform                                                             
EN

回答 1

Stack Overflow用户

发布于 2017-05-31 07:29:30

最好的猜测是,您使用的是一些较旧版本的geckodriver,因为actions类是错误的,并且最近已经实现了。

我试过你的例子,效果很好。这是它的截图。屏幕截图

规格:

Firefox : 53.0.4

Geckodriver : 0.16.1

selenium-webdriver : 3.4.0

如果它适用于最新版本,请告诉我。

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44227760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档