Login 实现Test Action的不同方式
  目前可以有两种方式来实现Login这个的TestAction,相信在以后的使用过程中可能这两种种方式都有可能会用到:
  ·完全写代码实现,和之前代码没有太多区别,的区别是元素定位内容不会在TestAction代码中出现了完全,从而实现了和页面元素的解耦
  ·使用Annonation 来实现测试步骤
  实现例子
  代码实现可以分为三步:
  ·构建page
  ·构建和业务相关的TestAction
  ·构建测试类
  构建Page 类
  public class LoginPage extends BasePage { @FindBy(id= "usercode") private InputBox userCode; @FindBy(id="password") private InputBox password; @FindBy(id="msg") private WebElement msg;
  ...... 省略 get set 方法
  }
  构建TestAction
  继承BaseWebTestAction
  public class LoginActionByHand extends BaseWebTestAction { public LoginActionByHand(WebDriver driver, TestData testData) { super(driver, testData);
  } @Override public void execute() { //完全手动写TestAction LoginPage page = HtmlElementsLoader.createPageObject(driver,LoginPage.class);
  page.getUserCode().input(testData.get("userCode")); //or convert the test data to a model to get the value page.getPassword().input(testData.get("password"));
  page.getSubmit();
  }
  }
  还有一种方式来些TestAction是: 使用TestActionBuilder来写,可以给Builder添加多个TestAction,这个主要是组合多个TestAction使用的
  public class LoginActionSuperExecutor extends BaseWebTestAction {
  public LoginActionSuperExecutor(WebDriver driver, TestData testData) {
  super(driver, testData);
  }
  @Override public void execute() {//使用ActionBuilder // build 可以添加多个TestAction, 这样达到了组合不同Action的目的 TestActionsBuilder.build(new LoginActionByHand(driver,testData)).
  addAfterActions(new TestAction() { // add AfterAction的意思是可以在有些步骤后面添加一些特殊处理 @Override public void execute() {
  driver.get("http://gzz.dooioo.com/workspace");
  }
  }).execute(); // 也可以在后自己写一些特殊处理 driver.get("http://gzz.dooioo.com/workspace");
  }
  }
  构建测试类
  public class LoginFlowByExecutorTest extends BaseWebTest { User user = new User("110863","abcd1235"); @Test public void testLoginAction(){
  LoginActionByHand flow1 = new LoginActionByHand(driver,user);
  flow1.execute();
  System.out.println("end of test");
  } @Test public void testLoginAction_getTestActionName(){
  Assert.assertEquals(new LoginFlowByExecutor(driver,user).getTestActionName(),"LoginFlowByExecutor");
  }
  }
  注解方式来构建TestAction
  在Page类上面添加注解,构建某个流程 格式如下例:
  UIActions 表示有多个UIAction的注解,每一个UIAction表示一个TestAction
  每一个UIAction实际表示一个TestAction 下面这个例子中登陆,登陆2可以认为是两个不同的操作流程 elementActionDescription描述的是操作元素的动作,userCode input表示在元素userCode上面进行输入,输入什么,其实是TestData中userCode的值 对于InputBox来说,动作input是Inputbox的默认动作,所以在登陆2里面省略了,所有省略动作的藐视都是用默认动作进行处理
  @UIActions(
  actions = { @UIAction(processName = "登陆",
  elementActionDescription = {"userCode input","password input","submit click"}), @UIAction(processName = "登陆2",elementActionDescription = { "userCode","userCode ","submit " })
  }
  ) public class LoginPageAnnotationWithUIAction extends BasePage { @FindBy(id= "usercode") private InputBox userCode; @FindBy(id="password") private InputBox password; @FindBy(id="msg") private HtmlElement msg; public Button getSubmit() { return submit;
  } public void setSubmit(Button submit) { this.submit = submit;
  } @FindBy(className = "btn_login") private Button submit;
  。。。。。。。 省略get/set 方法
  }
  构建注解方式的TestAction
  同样适用TestActionBuilder可以了
  public class LoginActionByExecuteUIAction extends BaseWebTestAction { public LoginActionByExecuteUIAction(WebDriver driver, TestData testData) { super(driver, testData);
  } @Override public void execute() {
  LoginPage page = LoginPage.createPage(LoginPage.class,driver);
  AnnotationBasedActionBuilder.executeUIAction(page,"登陆",testData);
  }
  }
  构建测试类
  构建测试类的方式和上面构建测试类是其实是一样的
  API/WebService 自动化测试
  API(接口)数据驱动测试
  API(接口)测试,这里主要是指http请求或者是指restful service类型的测试.主要的测试思路是根据API的规格 构造api的请求,然后向服务端发起请求,这样可以得到服务端的请求返回值,进行验证。因此在整个测试过程 中如果构建这个请求是一个关键点,关于构建请求在前面介绍APITest的时候有提到过,可以参考 一下。但是一下的内容是在前文的基础上做了一些封装后,可以写少一点代码来实习API的数据驱动测试
  API(接口)测试流程
  在做了一些封装之后,api测试包括了以下几个步骤:
  ·构建一个JSON文件来描述这个API的接口
  ·构建一个调用这个API的java 类(构建请求)
  ·构建和API规格说明相匹配的一个外部数据(excel)
  ·构建测试用例类