我们如何在页面对象模型测试框架中处理页面之间的导航



我正在使用一个带有ruby的BDD Cucumber框架来测试一个网站。我遵循页面对象模型模式。我为每个页面都有一个不同的类及其元素和功能,并为每个页面提供一个单独的功能文件,其中包含与该页面相关的场景。

我对POM结构很陌生,有一个疑问:

现在,如果我想有一个场景,从主页开始,浏览菜单/子菜单,最后到达网站的某个Page1,我想通过url或标题验证我是否在正确的页面上。

  1. 我应该将这样的场景放在home_page.feature还是page_1.feature中?

  2. 如果我从主页开始,显然我的@Page变量将加载主页,所以我应该在何时何地更改它Page1,因为我需要Page1元素来验证最后一步(url、标题或图像等,我在Page1上)

  3. 人们通常是如何利用POM框架围绕导航构建测试的?

我们创建了导航功能文件,其中包含<MENU>和子菜单链接以回答您的第一个问题。

//验证所有链接是否存在

   Feature : verify all submenu links 
    Given as user I logs in "http://stackoverflow.com/ 
    When I click on menu "<StackExchange>" 
    Then I able to see following submenu link"<Meta Stack Overflow,Stack overFlow Careers>"

这是我们现在拥有的导航的结构理念

  • 我们每个页面都有一个类,页眉、页脚和右侧菜单都有单独的类
  • 如果我在主页上点击,所有菜单都有预期的行为,而不是在主页上。每个菜单都返回期望的对象,并使用该对象验证Title和期望的元素。当我点击主页链接时,它会返回HomePagePOM.class,使用这个对象我可以验证页面

  • 在Navigation类中,它将具有所有菜单和子菜单,并返回期望的对象。

您可以根据页面名称和值在页面中导航,不同的值可能意味着不同的页面。

# Given I am on page users board
Given /^I am on page ?(.+)?$/ do |page_name|
  case page_name
  when 'homepage'
    visit root_path
  when 'users board'
    visit users_path
  when 'products board'
    visit product_path
  else
    raise "Missing mapping for '#{page_name}' page."
  end
end

如果未定义页面名称,则会引发Missing mapping for '#{page_name}' page.异常。

在本文中找到使用黄瓜测试的其他方法。

最新更新