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

页面对象模型,这些方法有多离散?

林铭
2023-03-14

所以我一直在一个新项目上实施PoM,这将是我第一次这样做。我使用水豚和Rspec(Selenium)来编写我的框架。

我经常遇到的一件事是,我应该在我的页面对象类中创建多“离散”的方法。谈到这一点,我看到了两种思路:

让我们看一个制作小部件的页面:

选项1(一般化,更关注用户会做什么)

class WidgetPage

   def click_widgets_tab
        click_on('Widgets')
    end

    def create_widget_button
        click_on('Add Widget')
    end

    def enter_widget_name(name)
        fill_in 'Widget Name', with: name
    end

    def enter_widget_type(type)
        fill_in 'Widget Type', with: type
    end

    def widget_success?
        expect(page).to have_content('.alert', text: 'Widget Successfully created!')
    end
end

(在上述情况下,“填写”方法甚至可以组合使用。)

或选择2:

class WidgetPage

    def click_widgets_tab
        widget_tab_link.click
    end

    def create_widget_button
        widget_add_element.click
    end

    def enter_widget_name(name)
        widget_form_name.fill_in(name)
    end

    def enter_widget_type(type)
        widget_form_type.fill_in(type)
    end

    def widget_success?
        widget_success_alert.has_text? 'Widget successfully created!'
    end


    private

    def widget_add_element
        find_button('Widget')
    end

    def widget_form_name
        find_field('Widget Name')
    end

    def widget_form_type
        find_field('Widget Type')
    end

    def widget_tab_link
        find_link('Widgets')
    end

    def widget_success_alert
        find(.alert, text: "Widget successfully created!")
    end

end

我觉得我看到大多数页面对象教程都使用选项2。。。但似乎有很多额外的代码,投资回报率很低。如果在多个方法中使用了返回元素的方法,那么对我来说是有意义的。。。但并非所有方法都适用。

此外,就断言而言,选项1更有意义。但我也听说页面对象中不应该有断言。因此,也许有一个方法可以返回警报是否可见(例如,是否可见)更有意义?仍然不确定处理这个问题的最佳方法。

共有1个答案

萧韬
2023-03-14

我认为这是一个公平的问题,很多问题都与偏好有关,但如果你为自己的情况选择了错误的“偏好”,那么你可能会陷入一些相当真实的陷阱,因此我认为这是值得讨论的。

  • 部分观点:如果你的应用程序是薄薄的/易挥发的/易需要解决方案的,考虑页面对象中更多的颗粒方法,在步骤定义中不要使用太妃糖。有几十个页面是很烦人的。要素单击()步骤defs中的调用,这些调用都需要更新,因为应用程序更改为每次单击前都需要悬停。如果该操作在页面对象中包装为page。单击element()然后您就可以在一个地方进行更新(或实施变通方法)

差不多

def get_widget_alert
    find(.alert).get_text()
end

从步骤def as调用

expect(widget_page.get_widget_alert).to eq('Widget Successfully created!')

如果有人决定沿途更改消息的标点或大小写,则将失败并显示有用的消息。

 类似资料:
  • 我正在使用Selenium为我的网站构建一个测试框架,我实际上希望您在使用页面对象模型时对良好实践的想法:让我们说,我有一个欢迎页面,其中包含一个注销按钮存在的标题,这个标题可以在大多数页面中看到在我的页面中,我认为最好为标题写一个单独的类,比如: 公共类欢迎页 我的问题是,你认为在欢迎页面中包含标题作为属性更好还是应该将它们分开? 让我们以注销测试方法的代码为例: 案例一: 案例2: 第二个问题

  • 是否有任何Gem(比如siteprism:用于Web自动化测试)可以在我的移动自动化测试项目中使用,以使用页面对象模型模式定义屏幕。 提前谢谢

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

  • 我遵循这里的POM指南 问题是当输入有效的用户/密码时,POM正在返回新的HomePage(驱动程序),新的HomePage构造函数正在通过传递的驱动程序验证我们实际上在“主页”页面上。自然,驱动程序被打开到登录页面,所以在主页上查找元素是徒劳的。POM方法应该如何将“PageFactory”主页对象实际“打开”返回到主页?

  • 想象有一个页面在说http://google.com/AddUser在这里输入记录的详细信息,然后单击保存。完成此操作后,页面将重定向到 http://google.com/userList 您可以在其中查看用户列表,包括您刚刚输入的新记录。 如果我们按照页面对象模型,那么在和验证记录是否实际保存和显示的方法应该在 如果我们认为addUser和userList是两个类的对应对象,它会像下面这样:

  • 第一次海报。我已经在UI自动化领域工作了很多年,但直到最近才被介绍/指示使用页面对象模型。其中大部分是常识,包括我已经使用过的技术,但是有一个特别好的点我还没有能够在我自己的头脑中证明,尽管我广泛地寻找一个合理的解释。我希望这里有人能启发我,因为当我试图将POM与我自己的最佳实践相结合时,这个问题已经引起了一些恐慌。 从http://code.google.com/p/selenium/wiki/