我在名为PageObjects的文件中为xpath设置了变量。我运行的每个规范都使用“ p = PageObjects.new”初始化页面对象。但是,我想在“ spec_helper.rb”中而不是每个规范中初始化“ p = PageObjects.new”。
这仍然给我“错误:未初始化的常量PageObject” ...
require 'selenium-webdriver'
require 'yaml'
require 'rspec/retry'
require 'pry'
require 'bundler/setup'
p = PageObject.new
RSpec.configure do |config|
config.default_sleep_interval = 1
config.default_retry_count = 4
config.verbose_retry = false
config.display_try_failure_messages = true
config.exceptions_to_retry = [Net::ReadTimeout, Capybara::ElementNotFound]
end
是否有一种方法可以通过在spec_helper中而不是在每个规范中初始化PageObject来实现我的目标?
答案 0 :(得分:1)
RSpec helpers似乎是您的理想选择
定义helper.rb
module Helpers
def p
@page_object ||= PageObject.new
end
end
配置RSpec使其包含:
RSpec.configure do |c|
c.include Helpers
end
然后您可以使用p
方法,该方法将为您提供PageObject:
specify do
expect(p).to be_a(PagObject)
expect(p.object_id).to eq(p.object_id)
end
答案 1 :(得分:0)
您实际上希望在测试之间维护测试数据库。出于多种原因,这很危险,最明显的是以前的测试会影响以后的测试。在处理相同的PageObject时,您需要在测试之间将其重置。
将其放在一侧,可以在以下位置找到启用/禁用此功能的选项:
https://relishapp.com/rspec/rspec-rails/docs/transactions,即:
运行rails时会生成rspec:install,即spec / rails_helper.rb 文件包含以下配置:
RSpec.configure do |config|
config.use_transactional_fixtures = true
end
此设置的名称有点误导。到底是什么意思 Rails中的“运行事务中的每种测试方法”。在里面 rspec-rails的上下文,这意味着“在 交易。”
这个想法是从一个干净的数据库开始每个示例,创建 该示例所需的任何数据,然后将其删除 通过在示例末尾简单地回滚事务。
禁用事务如果您希望自己管理数据,或者 使用其他工具(例如database_cleaner)为您完成操作,只需告诉 RSpec告诉Rails不要管理事务:
RSpec.configure do |config|
config.use_transactional_fixtures = false
end