分類  >  Web前端 >

Selenium-webdriver 頁面模式在實際項目中的實際運用,大量Page頁面怎麼初始化

tags:    時間:2013-12-10 00:05:48
Selenium-webdriver 頁面模式在實際項目中的實際運用,大量Page頁面如何初始化?

//編寫頁面類  封裝頁面屬性和頁面邏輯

 

package jd.pages.erp;

import jd.pages.Page;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class LoginPage extends Page
{
   @FindBy(id= "Name")
   public static WebElement username;
  
   @FindBy(name= "Password")
   public static WebElement userpwd;
  
   @FindBy(name= "Logon")
   public static WebElement loginBtn;
  
   public static void Login(String user,String pwd)
   {

     username.sendKeys(user);
     userpwd.clear();
     userpwd.sendKeys(pwd);
     loginBtn.click();  
   }

}

 

///在框架載入的時候就遞歸初始化某個包下面的所有 Page的子類,Page指的是一個自己編寫Java類, 所有PageObject 頁面都繼承這個類, 下面在初始化頁面的的時候就可以通過判斷哪些頁面該初始化,(通過判斷是不是Page的子類)   PS:因為webdriver中必須先載入頁面才能訪問頁面內的元素,否則會報錯, 單個的class可以用PageFactory.initElements(driver, (Class<?>) classObject);載入, 一旦頁面元素多了, 就必須批量初始化。  所以採用遞歸的方式,一次性初始化所有Page,就不用每次使用某個頁面都調用一次初始化方法了。

 

 public static void initAllPages(WebDriver driver)
 {
      File rootFile = new File( Page.class.getResource(".").getFile());
      //初始化所有子類
      setSonList(rootFile, rootFile.getAbsolutePath() + "\\", Page.class, rootFile.getAbsolutePath() + "\\" ,driver);
 }

 

   public static <T> void setSonList(File rootFile, String parentDirectory, Class<T> parentClass, String mainPath ,WebDriver driver) {
        if (rootFile.isDirectory()) {
            File[] files = rootFile.listFiles();
            for (File file : files) {
                setSonList(file, parentDirectory, parentClass,mainPath, driver);
            }
        }
        else {
            String className = null;
            try {
                if (rootFile.getPath().indexOf(".class") != -1 ) {
                 
                    className = rootFile.getPath().replace(mainPath, "").replace(".class", "").replace("\\", ".");
                    System.err.println("初始化Page:"+parentClass.getPackage().getName()+"."+className);
                    Class<?> classObject = Class.forName(parentClass.getPackage().getName()+"."+className);
                    classObject.asSubclass(parentClass);
                    PageFactory.initElements(driver, (Class<?>) classObject);
                   
                }
            } catch (ClassNotFoundException e) {
                System.err.println("找不到類 " + className);
            } catch (ClassCastException e) {
                System.err.println(className + " 不是 " + parentClass + " 的子類");
            }
        }
    }

測試用例中組織業務邏輯;

推薦閱讀文章

Bookmark the permalink ,來源:互聯網