ruby-on-rails - Capybara,可以访问 Selenium 操作吗?
问题描述
回答:原来需要做的就是添加.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 的评论。我正在尝试使用 Capybara 与 Selenium WebDriver 和 Apparition javascript_driver 在测试中访问 Selenium API 操作:
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 本身中(如此处所述),但我似乎无法找到正确的方法/语法结构来发挥它的作用。
注意:我目前正在使用带有幻影驱动程序的 Rails 6 和 Capybara。~~据我所知,幻影被设计为 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
不是“真实”Selenium::Webdriver
而是包含在 Capybara 中的事实有关,alaCapybara::Selenium::Driver
我可以做些什么来在我的 Rails 系统测试中使用这些与 Selenium 相关的方法/操作?如果不使用 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
解决方案
幻影绝对不是硒+附加物。事实上,它开始更多是作为 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中定义,但您将使用可能在任何版本上中断的私有 API
推荐阅读
- hyperledger-fabric - Hyperledger Cryptogen 的生产替代方案
- python - 计算 pandas 数据框应用函数的迭代次数
- excel - 确定表是否为空,然后跳过宏的其余部分
- php - 将数组的内容拆分为不同的行
- javascript - FileReader 返回未定义
- vba - 复制/粘贴 - 下标超出范围错误
- matlab - MATLAB 用给定的向量减去矩阵的每一行
- javascript - jquery将日期转换为格式化日期
- angular - 当我从打字稿传递条件时,ngIf 和 hidden 不是绑定属性
- gcc - 哪个 gfortran 编译器标志与警告“非法预处理器指令”相关联?