我正在使用一个带有ruby的BDD Cucumber框架来测试一个网站。我遵循页面对象模型模式。我为每个页面都有一个不同的类及其元素和功能,并为每个页面提供一个单独的功能文件,其中包含与该页面相关的场景。
我对POM结构很陌生,有一个疑问:
现在,如果我想有一个场景,从主页开始,浏览菜单/子菜单,最后到达网站的某个Page1,我想通过url或标题验证我是否在正确的页面上。
-
我应该将这样的场景放在home_page.feature还是page_1.feature中?
-
如果我从主页开始,显然我的@Page变量将加载主页,所以我应该在何时何地更改它Page1,因为我需要Page1元素来验证最后一步(url、标题或图像等,我在Page1上)
-
人们通常是如何利用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.
异常。
在本文中找到使用黄瓜测试的其他方法。