一、需求
有如下的基于web的组合搜索功能,需要创建自动化测试用例:
我们需要在所有的输入框输入不同的值,进行非常多次的搜索,然后验证
二、实现
创建一个类 ClientBasicSearchFields 去代表所有的输入框,创建一个方法 doClientBasicSearch(ClientBasicSearchFields csf)去执行搜索的操作,通过ClientBasicSearchFields将参数传入
public void doClientBasicSearch(ClientBasicSearchFields csf){
type("element identifier1", csf.getClientName());
type("element identifier2", csf.getClientShortName());
type("element identifier3", csf.getAddress());
type("element identifier4", csf.getCity());
select("element identifier5", csf.getState());
type("element identifier6", csf.getZip());
type("element identifier7", csf.getFirstClientSerRep());
type("element identifier8", csf.getSedClientSerRep());
select("element identifier9", csf.getBillingFre());
select("element identifier10", csf.getClinicalFre());
clickAndPause("submit");
}
接下去是重点,使用Builder模式的java类ClientBasicSearchFields
public class ClientBasicSearchFields {
private final String clientName;
private final String clientShortName;
private final String address;
private final String city;
private final String state;
private final String zip;
private final String firstClientSerRep;
private final String sedClientSerRep;
private final String billingFre;
private final String clinicalFre;
private ClientBasicSearchFields(Builder builder){
clientName = builder.clientName;
clientShortName = builder.clientShortName;
address = builder.address;
city = builder.city;
state = builder.state;
zip = builder.zip;
firstClientSerRep = builder.firstClientSerRep;
sedClientSerRep = builder.sedClientSerRep;
billingFre = builder.billingFre;
clinicalFre = builder.clinicalFre;
}
public String getClientName() {
return this.clientName;
}
public String getClientShortName(){
return this.clientShortName;
}
public String getAddress(){
return this.address;
}
public String getState(){
return this.state;
}
public String getCity(){
return this.city;
}
public String getZip(){
return this.zip;
}
public String getFirstClientSerRep(){
return this.firstClientSerRep;
}
public String getSedClientSerRep(){
return this.sedClientSerRep;
}
public String getBillingFre(){
return this.billingFre;
}
public String getClinicalFre() {
return this.clinicalFre;
}
public static class Builder {
private String clientName = "";
private String clientShortName = "";
private String address = "";
private String city = "";
private String state = "";
private String zip = "";
private String firstClientSerRep = "";
private String sedClientSerRep = "";
private String billingFre = "";
private String clinicalFre = "";
public Builder(){
}
public Builder clientName(String value){
clientName = value;
return this;
}
public Builder clientShortName(String value){
clientShortName = value;
return this;
}
public Builder address(String value){
address = value;
return this;
}
public Builder city(String value){
city = value;
return this;
}
public Builder state(String value){
state = value;
return this;
}
public Builder zip(String value){
zip = value;
return this;
}
public Builder firstClientSerRep(String value){
firstClientSerRep = value;
return this;
}
public Builder sedClientSerRep(String value){
sedClientSerRep = value;
return this;
}
public Builder billingFre(String value){
billingFre = value;
return this;
}
public Builder clinicalFre(String value){
clinicalFre = value;
return this;
}
public ClientBasicSearchFields build(){
return new ClientBasicSearchFields(this);
}
}
}
最后,在测试方法中这样使用
public void testSearchByClientName() {
// 进入我们需要测试的页面
logInToTheSystem();
navigateToSearchClientPage();
// 根据设置的参数进行搜索
ClientBasicSearchFields csf = new ClientBasicSearchFields.Builder().clientName(
“testName”).build();
doClientBasicSearch(csf);
// 验证结果
verifySearchResultsPage();
}
如果需要同时输入多个值进行搜索,可以采用如下方式:
ClientBasicSearchFields csf = new ClientBasicSearchFields.Builder().clientName(
"某某某").city("杭州").zip("310000")
.build();
在每一个测试方法中,我们可以创建一个csf,然后通过这种方法初始化测试数据,我们每次可以设置的参数个数都是可以选的,可以很简单得去创建更多我们需要的测试用例。
三、总结
如果用普通的javabean, 也可以实现同样的功能。用builder模式,看上去更加阅读,而且比JavaBean更加安全(Effective Java第二版)
- 大小: 37.7 KB
分享到:
相关推荐
7. **测试代码**:编写测试用例,验证Composite和Builder模式的正确实现。 通过这个实验,你不仅能深入理解这两种设计模式,还能提升在实际项目中应用设计模式的能力。在实践中,不断优化和调整代码,以满足更复杂...
创建型模式主要处理对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)以及原型模式(Prototype)。这些模式有助于我们控制对象的...
这些文件通常会包含模式的实现、注释以及可能的测试用例,方便你在VS2010中直接编译和运行。 学习设计模式的过程中,理解其背后的意图和适用场景至关重要。例如,适配器模式用于使不兼容的接口能够协同工作;装饰器...
创建型设计模式如单例模式(Singleton)、工厂模式(Factory)和建造者模式(Builder),它们主要关注对象的创建过程,确保在不同场景下能正确、高效地创建对象。例如,单例模式保证一个类只有一个实例,常用于配置...
在"java-design-patterns"这个项目中,你可能会找到每个模式的实现示例,包括源代码、测试用例和相关的说明文档。通过实际操作和分析这些代码,你可以更深入地理解每个模式的工作原理和适用场景。 例如,单例模式是...
Java设计模式是软件工程中的一种最佳实践,它们是解决常见编程...此外,可能还包含了一些测试用例和文档,帮助解释每种模式的应用场景和优缺点。对于Java开发者来说,深入理解和掌握设计模式是提升编程能力的关键步骤。
- **测试用例**:包含的测试代码展示了设计模式在实际使用中的效果,有助于验证模式的正确性和有效性。 通过分析Dpatoolkit的源代码,开发者不仅可以学习到如何在实际项目中应用设计模式,还可以了解到如何将这些...
此外,它还可能包含测试用例,帮助我们验证模式的正确性和效率。 为了深入学习和理解"DesignDemo",你需要逐一探索每个模式,阅读代码,理解其结构和逻辑。同时,结合描述和注释,可以更好地了解设计模式如何解决...
Builder模式则解决了这个问题,通过将构建过程分解为一系列方法调用,每个方法设置一个属性,使得代码更易读,也更容易进行单元测试。 BuilderBuilder的工作原理是自动生成这些构建器类,开发者只需要提供POJO的...
在这样的项目中,你可能会找到每个设计模式的Java实现,以及相关的说明文档或者测试用例。通过阅读和分析这些代码,你可以深入了解如何在实际项目中应用设计模式。 在实际开发中,设计模式的应用并不是一成不变的。...
2. 创建Flex客户端:使用Flex Builder或Flash Builder创建Flex项目,并设置适当的AMF通道以与服务器通信。 3. 配置Struts2:在struts.xml配置文件中添加Flex插件,设置Action和Result类型,以便Flex客户端能够正确...
文件名"Aryzath-master"可能表示这是项目的主分支或者源码仓库的主目录,其中可能包含了各种实现设计模式的代码示例、测试用例以及相关的文档。对于想要深入学习Golang和设计模式的开发者来说,这个项目提供了一个...
在软件开发领域,设计模式是一种经过时间和实践验证的解决方案,用于...项目的名称"DesignPattern4J-master"表明这是一个包含所有设计模式的主分支,可能包括了每个模式的独立示例和测试用例,为学习和实践提供了方便。
在"DesignPattern-Exercises-main"目录下,你可能发现针对上述模式的实现示例,每个模式通常会有对应的测试用例,帮助你更好地理解和运用这些模式。通过实际操作这些代码,你可以深入理解设计模式如何在实际场景中...
- "Object-Oriented-Analysis-and-Design-main"可能包含项目源码、文档、测试用例等,通过实际操作来巩固和深化设计模式的理解和应用。 在这个项目中,你将有机会亲手实现这些设计模式,理解它们的优缺点,以及在...
3. **测试用例**:为了验证模式的有效性,通常会有单元测试或者集成测试代码,这些测试用例有助于我们理解和验证模式的正确性。 4. **案例研究**:可能包含将设计模式应用于实际项目中的例子,帮助我们理解如何在...
在"DesignPattern-master"这个项目中,你可能会找到每个模式的Java实现,以及相关的说明文档或测试用例。通过学习和理解这些模式,开发者可以写出更加健壮、易于维护的代码,同时提高代码的复用性和扩展性。设计模式...
在Ruby编程语言中,设计模式是一种解决常见问题的模板或最佳实践,它为软件开发提供了可重用的解决方案。...运行项目中的测试用例是验证设计模式正确实现的关键步骤,这有助于确保代码按照预期工作,并且符合规格要求。