我有Selenium测试填写表格。我有一个方法,但这种方法在参数数量方面已经过度生长 -
newMerchantPage.addEditMerchant(merchantDomain, merchantName,
merchantCategory, true, merchantDescription, merchantNotes,
merchantTags, true, true, false, false, merchantTitle,
additionalDescription, merchantHeading, dummyCouponLink, true);
只有字符串和布尔值。 我正在考虑使用集合,然后在调用方法中迭代集合以进行更多处理。虽然还不确定这是否可行。有什么建议吗?
修改方法:
在实施了几个建议后,我的方法(不同方法)看起来像 -
ContactPage contactPage = new ContactPage(driver);
setContactFormData();
contactPage.setName(name).setEmailAddress(emailAddress).setSubject(subject).setM essage(message);
contactPage.submitContactForm(contactPage);
submitContactForm依次调用不同的实用程序方法。看起来有多糟糕?特别是最后一行(对象的方法调用和作为参数传递的同一对象)?
答案 0 :(得分:5)
一种常见的方法是将参数包装在一个类中。然后,这个类可以提供返回this
的set方法,以允许一个很好的链接。 (请参阅ProcessBuilder
以获得一个好例子。)
示例:强>
MerchantData data = new MerchantData(); // initialize with sensible defaults
data.setDomain("example.com")
.setName("Some Name")
.setTags("tag1, tag2);
newMerchantPage.addEditMerchant(data);
答案 1 :(得分:2)
我假设您使用的是Selenium服务器(或RC)。
将数据包装到Merchant类中的建议都很好并且有意义,特别是从纯Java编码的角度来看。
但是,您在Selenium中关注的主要问题是您正在填写的表单,而不是商家域对象。
也许你可以将你的方法分解成更小的方法,比如 openMerchantForm(...) typeNameInMerchantForm(...) chooseMerchantCategory(...)
依此类推,具体取决于表单上设置的控件类型。这将反映您正在测试的行为,而不是直接设置域对象等。
希望有所帮助。
答案 2 :(得分:1)
也许 - 编写一个类Merchant
,使用方法值创建一个实例并改为传递实例?
newMerchantPage(Merchant merchant);
优点:您可以将测试参数保存在文件中,并执行以下操作:
Merchant merchant = new Merchant();
merchant.populate(File testdata, int record);
答案 3 :(得分:0)
您是否考虑过创建一个类,如果您指定的参数属于同一个类,则将该对象作为参数传递。