2012-02-14 10 views
1

すべてのロケータを試しましたが、DOMに追加された要素は検出されませんでした。これは私の最も最近の繰り返しです:Selenium.isElementPresentを使用すると、jQueryでDOMに追加された要素が検出されない

selenium.fireEvent("//button[2]", "click"); 
waitUntil(new Condition() { 

    @Override 
    public boolean evaluate() { 
     return selenium.isElementPresent("dom=document.getElementsByClassName('dialog-success')[0]"); 
    } 
}, (long)60000); 
verifyTrue(selenium.isElementPresent("dom=document.getElementsByClassName('dialog-success')[0]")); 

クリック作品、私はAjaxの呼び出しを行い、それが正常に戻ってくる、とDOMを更新しますが、WaitUntilにより、方法は、私はUIのダイアログを見ることができるにもかかわらず、trueと評価されたことがありません追加した。

答えて

1

すべてを試した後、Firefox用にSelenium IDEプラグインを使用することをお勧めしましたが、これは人生の節約になりました。録音を開始し、UIダイアログが表示されたら、私は先に進んで閉じました。確かに、IDEはクリックアクションを記録しましたが、XPath内のDIVのインデックスを使用して要素を特定しました。 SeleniumがjQueryに動的に追加された要素を実際に取得することを知ったので、私はXPath構文を見直し始めました。私には分かりませんが、jQuery UI(と私が推測するいくつかの他のプラグイン)は、UI DOM要素にクラス名を追加します。しかし、クラス値の文字列を持つ要素を検索すると機能しませんが、contains関数を使用してクラス値の文字列を検索するようにXPathを変更すると機能します。ここで私は結局何をしたのですか:

selenium.fireEvent("//button[2]", "click"); 
waitUntil(new Condition() { 

    @Override 
    public boolean evaluate() { 
     return selenium.isElementPresent("//div[contains(@class, 'dialog-success')]"); 
    } 
}, (long)60000); 
verifyTrue(selenium.isElementPresent("//div[contains(@class, 'dialog-success')]"));