Selenium 脚本、页面操作和页面元素分离的写法

1. 每个脚本分为三部分: test ( 即是test case), flow (即操作页面的工作流), page ( 页面元素)。 test 里的 step (验证点) 都是一个方法,但该方法不在 test具体实现, 具体实现是在 flow 里完成的;而 flow 是实现操作的具体工作流,但flow 操作的页面元素不在 flow 定义, 页面元素在 page 里定义。 工作链为: test -> flow -> page。  每个脚本的第一步即 在 Test, Flow 和 Page 各建立一个 class, 如 xxTest.java, xxFlow.java, xxPage.java.

2.  继承:
    xxTest extends yyAbstractTest ( Mercury 的工程继承 MercuryAbstractTest, RP工程继承RPAbstractTest)
    xxFlow extends yyAbstractFlow ( Mercury 的工程继承 MercuryAbstractFlow, RP工程继承RPAbstractFlow )
    xxPage extend AbstractPage
 
3. 初始化(构造函数);
    xxPage:  public xxPage ( WebDriver driver ){
        super ( driver);
    }
 
    xxFlow:  在定义构造函数之前先定义两个私有变量(其中一个是引进 xxPage):
  private WebDriver driver = null;  
    private xxPage xxpage = null;
    public xxFlow (WebDriver driver){
        this.driver = driver;
        this.xxpage = new xxPage (driver)
    }
 
4. 引入上一层的java 文件(构建上一层类的实例):
    xxTest : 引入 xxFlow 并要 new 一个 xxFlow 实例
    xxFlow:  引入xxPage 并 在 构造函数 new 一个 xxPage 实例
这是因为 Test 要用到 Flow 实例去进行操作;而Flow 要用到Page实例去引用Page类定义的元素 (由于 Flow 不是main 类或不是TestNG 的 test 类, 所以不能直接 xxPage xxpage = new xxPage(driver); 而只能把 xxPage xxpage 声明为自己的私有变量,最后在构造函数里实例化).
 
5.  xxTest 和 xxFlow  开头都是 定义 logger : private static final Logger logger = Logger.getLogger(xx.class);
具体:  xxTest extends yyAbstractTest {
    private static final Logger logger = Logger.getLogger(xxTest.class);
}
 
xxFlow extends yyAbstractFlow {
    private static final Logger logger = Logger.getLogger(xxFlow.class);
}
posted @ 2014-07-08 14:44  tomweng  阅读(484)  评论(0编辑  收藏  举报