【发布时间】:2019-12-21 04:46:51
【问题描述】:
我正在为 Web 应用程序使用 Capybara 和页面对象模型编写框架。这是我第一次编写自己的框架并使用 PoM 进行自动化。
我的基础“页面对象”本质上是初始化驱动程序,并在所有其他页面对象子类中使用(用于单个页面)
class PageObject
include Capybara::DSL
BASE_URL = 'https://www.atesturl.com'
Capybara.default_max_wait_time = 5
def initialize
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.load_selenium
browser_options = ::Selenium::WebDriver::Chrome::Options.new.tap do |opts|
# Workaround https://bugs.chromium.org/p/chromedriver/issues/detail?id=2650&q=load&sort=-id&colspec=ID%20Status%20Pri%20Owner%20Summary
opts.args << '--disable-site-isolation-trials'
end
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
Capybara.register_driver :selenium_chrome_headless do |app|
Capybara::Selenium::Driver.load_selenium
browser_options = ::Selenium::WebDriver::Chrome::Options.new.tap do |opts|
opts.args << '--headless'
opts.args << 'window-size=2880,1800'
opts.args << '--disable-gpu' if Gem.win_platform?
#opts.args << '--remote-debugging-port=9222'
# Workaround https://bugs.chromium.org/p/chromedriver/issues/detail?id=2650&q=load&sort=-id&colspec=ID%20Status%20Pri%20Owner%20Summary
opts.args << '--disable-site-isolation-trials'
end
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end
Capybara.current_driver = :selenium_chrome
end
def visit_url
visit BASE_URL
end
end
在大多数 PoM 示例中,我看到方法返回该页面对象的实例,但通常它们使用一些 @browser 传递的实例变量。在我的测试脚本中,我简单地通过let(:p) {PageObject.new} 调用基本页面对象类的实例,然后通过p.visit_url 然后通过new 创建其他页面对象的新实例......但这似乎是错误的做法它。
我究竟如何返回可以传递的@browser 或驱动程序的实例?我应该如何在我的规范中调用它?
【问题讨论】:
-
试图理解你的问题......所以目前'浏览器'是一些不可见的全局(这就是为什么你在没有调用者的情况下调用
visit)但你想让它成为一个你可以的变量绕过? -
基本上,这就是我看到人们做方法链接返回页面对象的方式。我假设我可能会在构造函数中调用
@browser的实例? -
好吧,你可以从
visit_url之类的方法中返回self,这将使其可链接
标签: ruby capybara pageobjects