cucumber - 为众多客户提供 Watir-Webdriver 现场覆盖的方法

标签 cucumber watir watir-webdriver web-testing

好吧,我需要加强这个思维过程 - 我的大脑受伤了。我希望得到您对某些方法的反馈。

我会在前面发布我的问题,以防我在下面的描述中失去您的注意力:

  • 您以前编写过类似产品的脚本吗?您是如何实现这一目标的?

  • 这些方法中的任何一个对任何人来说都是伟大还是糟糕? 原因?如果是这样,那是什么?

  • 您还能找到其他方法吗 更合适吗?

我正在测试一个工作流程,为了论证起见,我们将其称为购物车,其中包含各种文本字段、单选按钮和选择列表。 一家公司提供此购物车约 60 个客户,并非所有客户都使用完全相同的表单,但一般流程是相同的。客户端之间的总体思路是相同的(相同的目标功能),并且存在具有完全相同的工作流程的客户端子集,但许多客户端是唯一的。在这种情况下,唯一可能意味着某些字段不是必需的,而它们可能对于其他客户端来说是必需的。或者,某个客户存在其他人根本无法使用的某些问题/文本字段。

此时脚本的目标只是通过 Web 界面生成订单,而不是将流程的每个单独步骤验证为“测试”。在这里你必须相信我一点。仍然有很多常见的细节能够以可接受的准确度运行负面/边缘情况。

到目前为止我看到的方法是:

  1. 使用页面对象模式,为每个客户端站点创建一个“页面”文件,并根据正在测试的客户端使用不同的页面类。这很乏味,而且大多很脆弱,并且维护工作量很大。但是,它会起作用,只要可以访问每个人的特定页面文件,我就可以使用相同的功能/场景。

  2. 创建一个方法来从 DOM 中抓取所有输入元素,检测它们是否是我们需要注入(inject)特定所需输入的保留字段,或者只是填写信息以完成订单。这不会依赖数据库,因此总体性能应该会更好。

  3. Hook 数据库,收集特定客户端用于构建其页面所需的所有信息,并动态构建订单字段,并相应地回答它们。这在理论上听起来很棒,几乎不需要维护。数据库抓取很容易,构建字段的困难对我来说还不知道......

现在我正在使用: watir-webdriver cucumber Cheezy 的页面对象 gem 续集

最佳答案

我将使用 cheezy 的页面对象并包含可以包含的每个字段/问题。然后我会重载每个客户的默认值,仅包括他们使用的字段/问题。希望我没有过于简单化这一点。

更新: 在 page populator ,它会将您发送的任何数据(作为哈希)与默认数据合并。在他的default data post中,他展示了如何使用默认数据。我认为您可以创建一个类(class)结账页面

 class CheckoutPage
  include PageObject

  text_field(:name, :id => “order_name”)
  text_field(:address, :id => “order_address”)
  text_field(:email, :id => “order_email”)
  select_list(:pay_type, :id => “order_pay_type”)
  button(:place_order, :value => “Place Order”)

  PageObject::PageFactory.routes = {
    :default => [[HomePage, :select_puppy],
                 [DetailsPage, :add_to_cart],
                 [ShoppingCartPage, :continue_to_checkout],
                 [CheckoutPage, :complete_order]]
  }

  def complete_order(data = {})
     data = DEFAULT_DATA.merge(data)
     self.name = data['name']
     self.address = data['address']
     self.email = data['email']
     self.pay_type = data['pay_type']
     place_order
   end
 end

然后为使用该网站的特定供应商重载它,每个供应商都有自己的默认数据。

class Nordies < CheckoutPage
      DEFAULT_DATA = {
        ‘name’ => ‘cheezy’,
        ‘address’ => ‘123 Main Street’,
        ‘email’ => ‘cheezy@example.com’,
        ‘pay_type’ => ‘Purchase order’
      }

PageObject::PageFactory.routes = {
  :default => [[HomePage, :select_puppy],
               [DetailsPage, :add_to_cart],
               [ShoppingCartPage, :setup_creditcard],
               [CreditCardPage, :continue_to_checkout],
               [CheckoutPage, :complete_order]]
}
end

那么每个供应商的 .complete_order 都会不同。

关于cucumber - 为众多客户提供 Watir-Webdriver 现场覆盖的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10035371/

相关文章:

selenium - 页面对象模型链接是否与 Cucumber 的 Gherkin 兼容?

ruby - 抓取启用 ajax 的网页

cucumber 无法加载 2.1/gherkin_lexer_en

internet-explorer - Watir Webdriver 文本在 IE 上输入缓慢

ruby - cookies 让我发疯,还是我疯了?

java - 通过 Maven 运行的 JUnit/Cucumber 测试未在 VS Code 中调试

java - 无法找到存在的元素,获取 NullPointerException 而不是 NoSuchElement

ruby - 使用 Watir 在其下具有多个链接的 div 中查找文本

ruby - 如何将可选参数传递到 Ruby 方法中?

ruby - 找到了 Cucumber.yml,但无法针对 Parallel_Tests 进行解析