JAva-selenium自動化テストpage object、pageFactory設計モード


seleniumの現在流行しているデザインモデルはpage objectですが、いったい何がpage objectなのか、簡単に言えば、ページをオブジェクトとして、使用中にページオブジェクトを渡して、ページオブジェクトの対応するメンバーや方法を使って、javaのオブジェクト向けやパッケージ特性をよりよく提示することができます.使用時間が長くなると、このモードにも問題があることがわかります.それは、要素が毎回取得され、取得要素がページ方法と分離されず、コード冗長性が増加し、springMVCフレームワークを使ったことがある人は、注釈方式の開発が開発効率を大幅に増加させ、ページをきれいにすることを知っています.
今回はpageFactoryデザインモデルをご紹介しますが、pageFactoryデザインモデルとは何でしょうか.
正確にはpage objectモードに基づいてオブジェクト向けの思考をよりよく利用し、取得要素と操作ページの方法を分離し、以前は取得要素をfindelementbyidなどしていたが、今では1つの注釈で済むようになり、再び自動化回帰テストを走ると、コードはキャッシュを取得する特性があるため、初めて走るよりも速くなる.idさえあればnameは変わらない.
1.まずFindByクラスについて説明します.
For example, these two annotations point to the same element:
 @FindBy(id = "f") WebElement f;
 @FindBy(how = How.ID, using = "f") WebElement f; 

and these two annotations point to the same list of elements:

 @FindBy(tagName = "a") List links;
 @FindBy(how = How.TAG_NAME, using = "a") List links;

1つの要素と複数の要素を別々に検索するための2つの使い方です.サポートされているタイプはclassName、css、id、linkText、name、partialLinkText、tagName、xpath。です.
Howでサポートされているタイプは とあまり がありません.
2. にPageFactoryクラスについて する
Factory class to make using Page Objects simpler and easier.
される はすべて で、 び すことができます.findbyを い わった 、 の が な は、 の を び す があります.
initElements(ElementLocatorFactory factory, java.lang.Object page)、initElements(FieldDecorator decorator, java.lang.Object page)、initElements(WebDriver driver, java.lang.Class pageClassToProxy)、initElements(WebDriver driver, java.lang.Object page)
の では、 のように できます.
PageFactory.initElements(dr, XXX.class);

または
PageFactory.initElements(new AjaxElementLocatorFactory(dr, 10) ,XXX.class);

は が わったときの ち である.3. のデザインモデルを に を げて します.
public class BasePage {    WebDriver driver;    private final int  TIMEOUT=3;    public  BasePage(WebDriver driver )    {  this.driver=driver;  PageFactory.initElements(new AjaxElementLocatorFactory(driver, TIMEOUT) , this);      }    public BasePage(WebDriver driver,final String title)    {  this.driver=driver;  WebDriverWait wait=new WebDriverWait(driver, TIMEOUT);  try{            boolean flag = wait.until(new ExpectedCondition(){                @Override                public Boolean apply(WebDriver arg0) {                    //TODO Auto-generated method stub                    String acttitle = arg0.getTitle();                    return acttitle.equals(title);                                    }}); }catch(TimeoutException te){throw new IllegalStateException(「 は されるページではなく、 のページtitleは:」+driver.getTitle()       }  PageFactory.initElements(new AjaxElementLocatorFactory(driver, TIMEOUT) , this);    }
これは の ページで、UI のページタイトルを するため、 でどのページもこのページを します.
2.ログインページ
public class LoginPage extends BasePage {     @FindBy(id="ele_active_close")@CacheLookupprivate WebElement wd;@FindBy(id="at_index_login-box_mobile")@CacheLookupprivate WebElement inputusername;@FindBy(id="at_index_login-box_password")@CacheLookupprivate WebElement inputpassword;@FindBy(id="at_index_login-box_p_forget_login")@CacheLookupprivate WebElement mybutton;public LoginPage(WebDriver driver) {//TODO Auto-generated constructor stubsuper(driver);}public LoginPage(WebDriver driver,String title){super(driver,title);//TODO Auto-generated constructor stub}//homepageタイプを しないといけません.このオブジェクトがこのタイプのpublic HomePage login(){JbClose();username(");password(");mybutton();return new HomePage(driver,"xxx);}public void  username(String username){inputusername.clear();inputusername.sendKeys(username);}public void password(String password){inputpassword.clear();inputpassword.sendKeys(password);}public void mybutton(){mybutton.click();}public void JbClose(){wd.click();} }
  3.ログイン のページ
public class HomePage  extends BasePage{    public HomePage(WebDriver driver) {super(driver);//TODO Auto-generated constructor stub}public HomePage(WebDriver driver,String title){super(driver,title);}       }
4. はmainメソッドですが、 にはtestngと して することをお めします
public class TestFactory {   public static void main(String[] args) { WebDriver driver=new ChromeDriver();driver.get("http://petrocoke-web-test.obaymax.com/");String logintitle="xxx";LoginPage lg=new LoginPage(driver,logintitle);HomePage hm=lg.login();System.out.println("テスト ");driver.quit()}}
このモードは を に し, い がよく,オブジェクト けプログラミングにもよく された.