2017-08-09 11 views
2

現在、私は相対的に小さなGWTアプリケーションを開発しており、私はSeleniumでGUIをテストしています。ユーザーがボタンの上にカスタムダイアログボックスをクリックした場合、私のアプリケーションでJava/Selenium IDによる要素の検索 - Annotation上でSeleniumがループしていますか?

public class DummyPage 
{ 

    @FindBy(id = ID_SEARCH_BTN)  
    private WebElement btnSearch; 

    @FindBy(id = ID_CANCEL_BTN_CLEAR) 
    private WebElement btnClear; 
    ... 

    public DummyPage() 
    { 
     eventFiringDriver = DriverFactory.getInstance().getEventFiringDriver(); 
     PageFactory.initElements(eventFiringDriver, this); 
    } 

    WebDriverWait webDriverWait = new WebDriverWait(eventFiringDriver, 20); 
    wait = webDriverWait.ignoring(StaleElementReferenceException.class); 
} 

:すべてが正常に動作しますが、私は私の頭の中でポップアップ質問私のテストを書いていた一方で:私のDummyPageで

を私は次のようにしますこのDialogBoxはボタンのclickHandlerに組み込まれているため、ページには存在しません。私は自分のカスタムDialogBoxのボタンをIDに渡してテストページに配置しました。 ?その作成時、またはWebElementがフェッチされる

@FindBy(id = DIALOGBOX_YES_BTN) 
private WebElement dialogBoxYesBtn; 

オブジェクトがnullになります:私はによってダイアログボックスのボタンを見つけるためにしようとした場合

私の質問はありますか? Seleniumは@FindBy注釈でループしており、それらを解決しようとしていますか?

現時点で私は最初のボタンをクリックして同じテストを行っていますが、そのIDでDialogBoxButtonを見つけようとしていますが、動作していますが、すべてのWebElementsをページオブジェクト

ご協力いただきありがとうございます。

+2

はい、ページオブジェクトに追加できます。キャッシュされた注釈が使用されている場合を除いて、オブジェクトに対してアクションを実行するたびにオブジェクトが取得されます。 – Murthi

+0

IMOでは、 'PageObject'を' PageObject'から(ページ内で)初期化する考えは良い考えではないかもしれません。あなたの質問によると、「ユーザーがボタンをクリックするとカスタムダイアログボックスが表示される」とは、基本的に、 'カスタムダイアログボックス'が 'HTML DOM'の一部であることを意味し、同じ' PageObject'からそれを処理できるはずです。 – DebanjanB

答えて

1

セレンはアノテーション上でループしていますか?答えがYesの場合、何らかのアクションを実行している場合は、期待されるWebElementを介してSeleniumループが実行されます。だからあなたの場合には、あなたは

@FindBy(id = DIALOGBOX_YES_BTN) 
private WebElement dialogBoxYesBtn; 

のように言及している場合は、

dialogBoxYesBtn.click(); 

のようなスクリプトでどここのwebelementを使用しようとするので、ドライバは最初にシミュレートし、その後現在のページにそれを見つけるとなりますWebElementのアクション。明らかに見つからなければ、例外がスローされます。

詳細はthis blogを参照してください。

関連する問題