我们如何处理页面对象模型测试框架

时间:2015-12-15 11:08:57

标签: ruby navigation cucumber bdd pageobjects

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

我对POM结构很新并且有疑问:

现在,如果我想要有一个场景,包括从主页开始,浏览菜单/子菜单并最终到达网站的某个Page1,我想通过网址验证我在正确的页面上标题。

  1. 我应该在home_page.feature或page_1.feature中放置这样的场景吗?

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

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

2 个答案:

答案 0 :(得分:0)

我们创建了导航功能文件,其中包含<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>"

这是我们现在用于导航的结构构思

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

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

答案 1 :(得分:0)

您可以按页面名称和值浏览页面,不同的值可能表示不同的页面。

let radius: CGFloat = 0.3
let height: CGFloat = 0.5
let color: UIColor = UIColor(red:0.17, green:0.62, blue:0.76, alpha:1.0)

let geometryTube = SCNTube(innerRadius: (radius - 0.1), outerRadius: radius, height: height)
let matOuter = SCNMaterial()
matOuter.diffuse.contents = color
matOuter.transparency = 0.1
let matInner = SCNMaterial()
matInner.diffuse.contents = color
matInner.transparency = 0.6
let matTop = SCNMaterial()
matTop.diffuse.contents = color
geometryTube.materials = [matOuter, matInner, matTop]

for index in 0...20 {
    let node = SCNNode(geometry: geometryTube)
    node.position = SCNVector3(1.0 + Double(index), -1.0, 0.0);
    sceneView.scene.rootNode.addChildNode(node)    
}

如果未定义页面名称,则会引发# 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 异常。

找出在article中使用黄瓜测试的其他方法。