当前位置: 首页 > 知识库问答 >
问题:

页面对象模型的"浏览器"的水豚实例?

封昊天
2023-03-14

我正在编写一个使用水豚和网页对象模型的网络应用程序的框架。这是我第一次编写自己的框架并使用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的大多数示例中,我看到返回该页面对象实例的方法,但通常它们使用一些传递的实例变量。在我的测试脚本中,我简单地通过让(:p){PageObject.new}调用Base page对象类的一个实例,然后p.visit_url然后创建另一个的新实例通过new页面对象......但这似乎是错误的方法。

如何准确地返回我可以传递的@浏览器或驱动程序的实例?在我的规格中,我应该怎么称呼它?

共有1个答案

杨乐
2023-03-14

您不希望在基本页面对象的初始化中注册驱动程序,因为这意味着创建的每个对象都将注册新的驱动程序配置,这是不可取的。

当您将Capybara::DSL包含到您的类中时,您将包含最终在Capybara.current_session上调用方法的方法。

还要注意,像Capybara这样的东西。默认的最大等待时间,`Capybara。当前的驱动程序等是全局设置,所以在PageObject类中设置它们不是一个好主意。

 类似资料:
  • 问题内容: 我们正在使用 Page Object模式 来组织内部AngularJS应用程序测试。 这是我们拥有的示例页面对象: 在单浏览器测试中,非常清楚如何使用它: 但是,当涉及到实例化多个浏览器并且需要在单个测试中在它们之间进行切换的测试时,变得不清楚如何在多个浏览器中使用同一页面对象: 问题: 分叉新浏览器后,如何使用相同的Page Object字段和函数,但将其应用于新实例化的浏览器(在这

  • ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 BOM(浏览器对象模型)则无疑才是真正的核心。BOM 提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关。多年来,缺少事实上的规范导致 BOM 有很多问题,因为浏览器提供商会按照各自的想法随意去扩展它。W3C 为了把浏览器中 JavaScript 最基本的部分标准化,已经将

  • 我正在使用Perl和Selenium构建一个测试自动化项目。我正在使用页面对象模型。我有点不确定Selenium驱动程序将适合页面对象模型的实现。 每个页面对象是否应该“有”一个驱动程序?我的想法是,每个页面对象代表页面向用户提供的一组服务。考虑到这个概念,页面对象与驱动程序没有“has-a”关系。页面对象与驱动程序交互。不过,我仍在寻求建议。我应该将驱动程序作为web应用程序中每个页面对象的一部

  • 不仅浏览器没有打开,而且测试失败,输出如下:

  • 浏览器模型概述 window 对象 Navigator 对象,Screen 对象 Cookie XMLHttpRequest 对象 同源限制 CORS 通信 Storage 接口 History 对象 Location 对象,URL 对象,URLSearchParams 对象 ArrayBuffer 对象,Blob 对象 File 对象,FileList 对象,FileReader 对象 表单,F

  • JavaScript可以获取浏览器提供的很多对象,并进行操作。 window window对象不但充当全局作用域,而且表示浏览器窗口。 window对象有innerWidth和innerHeight属性,可以获取浏览器窗口的内部宽度和高度。内部宽高是指除去菜单栏、工具栏、边框等占位元素后,用于显示网页的净宽高。 兼容性:IE<=8不支持。 'use strict'; ---- // 可以调整浏览器