好吧,我需要加强这个思维过程 - 我的大脑受伤了。我希望得到您对某些方法的反馈。
我会在前面发布我的问题,以防我在下面的描述中失去您的注意力:
您以前编写过类似产品的脚本吗?您是如何实现这一目标的?
这些方法中的任何一个对任何人来说都是伟大还是糟糕? 原因?如果是这样,那是什么?
- 您还能找到其他方法吗 更合适吗?
我正在测试一个工作流程,为了论证起见,我们将其称为购物车,其中包含各种文本字段、单选按钮和选择列表。 一家公司提供此购物车约 60 个客户,并非所有客户都使用完全相同的表单,但一般流程是相同的。客户端之间的总体思路是相同的(相同的目标功能),并且存在具有完全相同的工作流程的客户端子集,但许多客户端是唯一的。在这种情况下,唯一可能意味着某些字段不是必需的,而它们可能对于其他客户端来说是必需的。或者,某个客户存在其他人根本无法使用的某些问题/文本字段。
此时脚本的目标只是通过 Web 界面生成订单,而不是将流程的每个单独步骤验证为“测试”。在这里你必须相信我一点。仍然有很多常见的细节能够以可接受的准确度运行负面/边缘情况。
到目前为止我看到的方法是:
使用页面对象模式,为每个客户端站点创建一个“页面”文件,并根据正在测试的客户端使用不同的页面类。这很乏味,而且大多很脆弱,并且维护工作量很大。但是,它会起作用,只要可以访问每个人的特定页面文件,我就可以使用相同的功能/场景。
创建一个方法来从 DOM 中抓取所有输入元素,检测它们是否是我们需要注入(inject)特定所需输入的保留字段,或者只是填写信息以完成订单。这不会依赖数据库,因此总体性能应该会更好。
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/