Rails4/Capybara - 在测试中使用测试值 window width/dimensions
Rails4/Capybara - use the value of the test window width/dimensions inside a test
在 Rails 4.2 应用程序的 ruby 中,我在数据属性的视图中注入了一条基于 window.width() 计算的信息。为了问题简单起见,我在这里假设它等于 window.width()
view.js
var screen_width = window.width();
$target.attr('data-size', screen_width)
我想在 rspec/cpabayar(webkit 驱动程序)中测试目标元素是否具有正确的数据大小。
对于我的测试,我目前使用一个模块来设置我想要的大小
spec_helper.rb
# Helpers to help test responsive and screen resize
# config.include ResponsiveHelper
config.include ResponsiveHelper, type: :feature
/spec/responsive_helper.rb
module ResponsiveHelper
def resize_window_to_flattened_window
resize_window(1200, 480)
end
def resize_window_to_mobile
resize_window(375, 627) # apple iPhone 6
end
def resize_window_to_tablet
resize_window(960, 640)
end
def resize_window_default
resize_window(1024, 768)
end
private
def resize_window(width, height)
case Capybara.current_driver
when :selenium
Capybara.current_session.driver.browser.manage.window.resize_to(width, height)
when :webkit
handle = Capybara.current_session.driver.current_window_handle
Capybara.current_session.driver.resize_window_to(handle, width, height)
else
raise NotImplementedError, "resize_window is not supported for #{Capybara.current_driver} driver"
end
end
end
我有一个测试,测试视图中目标的数据大小属性中是否有正确的值:
view_features.spec.rb
describe "view behaves appropriately in terms of video size" do
resize_window_default
visit view_page_path(deal)
expect(page).to have_css('#target[data-size="1024px"]', visible: :visible)
end
问题是我上面有很多针对各种尺寸的测试(mobile1、mobile2、ipad...笔记本电脑...)
目前,正如您在上面看到的,我必须自己将 "hard-coded" 放入测试 1024 像素(此处:have_css('#target[data-size="1024px"]
'),当然,如果我已经放入 resize_window_default,它表示 window.width 为 1024,测试应将 1024px 分配给 Target 的数据大小。
但我想将其扩展到许多测试中,而无需对它进行硬编码,因为每次我都不需要对我期望的宽度值进行硬编码。
有什么办法吗?
- extract/get水豚使用的屏幕宽度?
这将是 "universal",并且独立于我的 Responsive Helper。它可以在任何测试中使用,无论我是否使用 Responsive Helper。
我的意思是 Capybara 有一个方法 resize_to 可以重新设置宽度,所以 Capybara 一定有办法获得宽度 output/value 本身?
会是这样的:
view_features.spec.rb
width_set_by_capybara = Capybara.screen.width
expect(page).to have_css('#target[data-size= width_set_by_capybara]', visible: :visible)
- 如果 1 不可能,有没有办法将我的 ResponsiveHelper 模块作为参数或类似的东西传递到我的测试文件,这将使我能够重新使用我刚刚设置的宽度值?
会是这样的:
/spec/responsive_helper.rb
module ResponsiveHelper
def resize_window_default
resize_window(1024, 768)
width_set_by_capybara = "1024px"
end
view_features.spec.rb
expect(page).to have_css('#target[data-size= width_set_by_capybara]', visible: :visible)
您可以在 here.
中找到该方法
##
# Get window size.
#
# @macro about_current
# @return [Array<(Integer, Integer)>] an array with width and height
#
def size
@driver.window_size(handle)
end
看来你可以调用window维度:
Capybara.current_session.driver.browser.manage.window.size
您不应该为此使用特定于驱动程序的方法(任何时候您使用 Capybara.current_session.driver。您可能做错了什么)。相反,您应该使用 Capybara 的 window api - http://www.rubydoc.info/gems/capybara/Capybara/Window
获取当前的大小window
Capybara.current_session.current_window.size
设置当前大小window
Capybara.current_session.current_window.resize_to(width, height)
在 Rails 4.2 应用程序的 ruby 中,我在数据属性的视图中注入了一条基于 window.width() 计算的信息。为了问题简单起见,我在这里假设它等于 window.width()
view.js
var screen_width = window.width();
$target.attr('data-size', screen_width)
我想在 rspec/cpabayar(webkit 驱动程序)中测试目标元素是否具有正确的数据大小。
对于我的测试,我目前使用一个模块来设置我想要的大小
spec_helper.rb
# Helpers to help test responsive and screen resize
# config.include ResponsiveHelper
config.include ResponsiveHelper, type: :feature
/spec/responsive_helper.rb
module ResponsiveHelper
def resize_window_to_flattened_window
resize_window(1200, 480)
end
def resize_window_to_mobile
resize_window(375, 627) # apple iPhone 6
end
def resize_window_to_tablet
resize_window(960, 640)
end
def resize_window_default
resize_window(1024, 768)
end
private
def resize_window(width, height)
case Capybara.current_driver
when :selenium
Capybara.current_session.driver.browser.manage.window.resize_to(width, height)
when :webkit
handle = Capybara.current_session.driver.current_window_handle
Capybara.current_session.driver.resize_window_to(handle, width, height)
else
raise NotImplementedError, "resize_window is not supported for #{Capybara.current_driver} driver"
end
end
end
我有一个测试,测试视图中目标的数据大小属性中是否有正确的值:
view_features.spec.rb
describe "view behaves appropriately in terms of video size" do
resize_window_default
visit view_page_path(deal)
expect(page).to have_css('#target[data-size="1024px"]', visible: :visible)
end
问题是我上面有很多针对各种尺寸的测试(mobile1、mobile2、ipad...笔记本电脑...)
目前,正如您在上面看到的,我必须自己将 "hard-coded" 放入测试 1024 像素(此处:have_css('#target[data-size="1024px"]
'),当然,如果我已经放入 resize_window_default,它表示 window.width 为 1024,测试应将 1024px 分配给 Target 的数据大小。
但我想将其扩展到许多测试中,而无需对它进行硬编码,因为每次我都不需要对我期望的宽度值进行硬编码。
有什么办法吗?
- extract/get水豚使用的屏幕宽度?
这将是 "universal",并且独立于我的 Responsive Helper。它可以在任何测试中使用,无论我是否使用 Responsive Helper。
我的意思是 Capybara 有一个方法 resize_to 可以重新设置宽度,所以 Capybara 一定有办法获得宽度 output/value 本身?
会是这样的:
view_features.spec.rb
width_set_by_capybara = Capybara.screen.width
expect(page).to have_css('#target[data-size= width_set_by_capybara]', visible: :visible)
- 如果 1 不可能,有没有办法将我的 ResponsiveHelper 模块作为参数或类似的东西传递到我的测试文件,这将使我能够重新使用我刚刚设置的宽度值?
会是这样的:
/spec/responsive_helper.rb
module ResponsiveHelper
def resize_window_default
resize_window(1024, 768)
width_set_by_capybara = "1024px"
end
view_features.spec.rb
expect(page).to have_css('#target[data-size= width_set_by_capybara]', visible: :visible)
您可以在 here.
中找到该方法##
# Get window size.
#
# @macro about_current
# @return [Array<(Integer, Integer)>] an array with width and height
#
def size
@driver.window_size(handle)
end
看来你可以调用window维度:
Capybara.current_session.driver.browser.manage.window.size
您不应该为此使用特定于驱动程序的方法(任何时候您使用 Capybara.current_session.driver。您可能做错了什么)。相反,您应该使用 Capybara 的 window api - http://www.rubydoc.info/gems/capybara/Capybara/Window
获取当前的大小window
Capybara.current_session.current_window.size
设置当前大小window
Capybara.current_session.current_window.resize_to(width, height)