JAva-selenium自動化テストpage object、pageFactory設計モード
5052 ワード
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:
and these two annotations point to the same list of elements:
1つの要素と複数の要素を別々に検索するための2つの使い方です.サポートされているタイプは
今回は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()}}
このモードは を に し, い がよく,オブジェクト けプログラミングにもよく された.