水豚,可以访问 Selenium 操作吗?
Capybara, possible to access Selenium actions?
答案:原来需要做的就是添加 .perform
操作。生成的代码如下所示:
start_x = 450
start_y = 450
offset = 50
page.driver.browser.action
.move_to_location(start_x, start_y)
.pointer_down(:left)
.move_by(offset, offset)
.pointer_up(:left)
.perform
特别感谢@Thomas_Walpole的帮助! :)
更新:感谢@Thomas Walpole 的评论,这是我现在正在尝试的。我正在尝试访问测试中的 Selenium API 操作,将 Capybara 与 Selenium WebDriver 和 Apparition javascript_driver:
结合使用
start_x = 450
start_y = 450
offset = 50
page.driver.browser.action
.move_to_location(start_x, start_y)
.pointer_down(:left)
.move_by(offset, offset)
.pointer_up(:left)
并再次尝试使用 .find_element
target = page.driver.browser.find_element(:css, '.cropper-canvas')
puts "#{target}"
=> #<Selenium::WebDriver::ELement:0x0000557b0ef5bf48
offset = 50
page.driver.browser.action
.move_to(target)
.pointer_down(:left)
.move_by(offset, offset)
.pointer_up(:left)
在任何一种情况下,测试似乎都已完成,但实际上什么也没有发生(一旦绘制了裁剪区域,就会在实时浏览器中触发一大堆事情)。
我做错了什么?
我正在尝试访问 Selenium 的一些操作,以尝试填补 Capybara 中未提供的一些内容的空白。这可能吗?
例如,我正在尝试测试点击并拖动操作以模拟用户在图像上选择裁剪区域,但据我所知,Capybara 中不存在此类功能.然而,它似乎存在于 Selenium Webdriver 本身 (as outlined here) 中,但我似乎找不到合适的 methods/syntax 结构来发挥它的作用。
注意:我目前正在使用 Rails 6 和 Capybara 以及 Apparition 驱动程序。 ~~据我所知,Apparition 被设计为 Selenium+Extras。所以这就是为什么我要专门询问Selenium,并且~~如果它对我的问题有帮助,我可以改回Selenium。
到目前为止,我的理解是可以在系统测试 *.rb 文件中使用 page.driver
、
访问驱动程序方法
cropper_canvas = find('.cropper-canvas')
x_offset = 20
y_offset = 20
page.driver.browser.drag_and_drop_by(cropper_canvas, x_offset, y_offset)
我还尝试使用
重新创建点击和拖动
page.driver.browser.click_and_hold(cropper_canvas).move_by_offset(x_offset, y_offset).release
但是这两种方法都没有通过。我怀疑这与以下事实有关:活动的 page.driver
不是 "true" Selenium::Webdriver
,而是包含在水豚中,ala Capybara::Selenium::Driver
我可以做些什么来在我的 Rails 系统测试中使用这些与 Selenium 相关的 methods/actions 吗?如果不使用 Capybara,那么我可以尝试另一种方法吗?
在此先感谢您的帮助或见解!我刚刚开始学习系统测试,所以如果我没有正确提及事物或我的电线有点交叉,我深表歉意。
test_helper.rb
require_relative '../config/environment'
require 'rails/test_help'
...
require 'capybara/rails'
require 'capybara/minitest'
require 'capybara-screenshot/minitest'
require 'capybara/apparition'
...
Capybara.default_driver = :selenium_chrome
Capybara.javascript_driver = :apparition
Capybara.register_driver :apparition do |app|
size = [1366,768]
options = {
headless: false,
windows_size: size,
screen_size: size,
timeout: 10,
}
Capybara::Apparition::Driver.new(app, options)
end
...
Class ActionDispatch::IntegrationTest
...
include Capybara::DSL
include Capybara::Minitest::Assertions
end
Apparition 绝对不是 selenium + extras。事实上,它更像是 Poltergeist 和 capybara-webkit API 的组合。 Apparition 实现了 Capybara 所需的驱动程序 API 但没有实现任何其他 Seleniums API 所以简短的回答是如果您使用 Apparition 则无法访问 Selenium 操作。
您也许可以通过
等方法做您想做的事
page.driver.browser.current_page.mouse.<xxxx>
其中可用的鼠标方法在 https://github.com/twalpole/apparition/blob/master/lib/capybara/apparition/page/mouse.rb 中定义,但您将使用私有 APIs,这可能会在任何版本中中断
答案:原来需要做的就是添加 .perform
操作。生成的代码如下所示:
start_x = 450
start_y = 450
offset = 50
page.driver.browser.action
.move_to_location(start_x, start_y)
.pointer_down(:left)
.move_by(offset, offset)
.pointer_up(:left)
.perform
特别感谢@Thomas_Walpole的帮助! :)
更新:感谢@Thomas Walpole 的评论,这是我现在正在尝试的。我正在尝试访问测试中的 Selenium API 操作,将 Capybara 与 Selenium WebDriver 和 Apparition javascript_driver:
结合使用start_x = 450
start_y = 450
offset = 50
page.driver.browser.action
.move_to_location(start_x, start_y)
.pointer_down(:left)
.move_by(offset, offset)
.pointer_up(:left)
并再次尝试使用 .find_element
target = page.driver.browser.find_element(:css, '.cropper-canvas')
puts "#{target}"
=> #<Selenium::WebDriver::ELement:0x0000557b0ef5bf48
offset = 50
page.driver.browser.action
.move_to(target)
.pointer_down(:left)
.move_by(offset, offset)
.pointer_up(:left)
在任何一种情况下,测试似乎都已完成,但实际上什么也没有发生(一旦绘制了裁剪区域,就会在实时浏览器中触发一大堆事情)。
我做错了什么?
我正在尝试访问 Selenium 的一些操作,以尝试填补 Capybara 中未提供的一些内容的空白。这可能吗?
例如,我正在尝试测试点击并拖动操作以模拟用户在图像上选择裁剪区域,但据我所知,Capybara 中不存在此类功能.然而,它似乎存在于 Selenium Webdriver 本身 (as outlined here) 中,但我似乎找不到合适的 methods/syntax 结构来发挥它的作用。
注意:我目前正在使用 Rails 6 和 Capybara 以及 Apparition 驱动程序。 ~~据我所知,Apparition 被设计为 Selenium+Extras。所以这就是为什么我要专门询问Selenium,并且~~如果它对我的问题有帮助,我可以改回Selenium。
到目前为止,我的理解是可以在系统测试 *.rb 文件中使用 page.driver
、
cropper_canvas = find('.cropper-canvas')
x_offset = 20
y_offset = 20
page.driver.browser.drag_and_drop_by(cropper_canvas, x_offset, y_offset)
我还尝试使用
重新创建点击和拖动page.driver.browser.click_and_hold(cropper_canvas).move_by_offset(x_offset, y_offset).release
但是这两种方法都没有通过。我怀疑这与以下事实有关:活动的 page.driver
不是 "true" Selenium::Webdriver
,而是包含在水豚中,ala Capybara::Selenium::Driver
我可以做些什么来在我的 Rails 系统测试中使用这些与 Selenium 相关的 methods/actions 吗?如果不使用 Capybara,那么我可以尝试另一种方法吗?
在此先感谢您的帮助或见解!我刚刚开始学习系统测试,所以如果我没有正确提及事物或我的电线有点交叉,我深表歉意。
test_helper.rb
require_relative '../config/environment'
require 'rails/test_help'
...
require 'capybara/rails'
require 'capybara/minitest'
require 'capybara-screenshot/minitest'
require 'capybara/apparition'
...
Capybara.default_driver = :selenium_chrome
Capybara.javascript_driver = :apparition
Capybara.register_driver :apparition do |app|
size = [1366,768]
options = {
headless: false,
windows_size: size,
screen_size: size,
timeout: 10,
}
Capybara::Apparition::Driver.new(app, options)
end
...
Class ActionDispatch::IntegrationTest
...
include Capybara::DSL
include Capybara::Minitest::Assertions
end
Apparition 绝对不是 selenium + extras。事实上,它更像是 Poltergeist 和 capybara-webkit API 的组合。 Apparition 实现了 Capybara 所需的驱动程序 API 但没有实现任何其他 Seleniums API 所以简短的回答是如果您使用 Apparition 则无法访问 Selenium 操作。
您也许可以通过
等方法做您想做的事page.driver.browser.current_page.mouse.<xxxx>
其中可用的鼠标方法在 https://github.com/twalpole/apparition/blob/master/lib/capybara/apparition/page/mouse.rb 中定义,但您将使用私有 APIs,这可能会在任何版本中中断