2009-09-18 17 views
5

Webアプリケーションのテストケースを自動化するためにFirefox用のchrome-modeでSelenium RCを使用しています。私はTestNGフレームワークとEclipseを使ってJavaでスクリプトを書いています。現在の主なポイント:Selenium RC XPathで問題が発生しました

特定のXPathを認識するためにSelenium RCに問題があります。 XPath-Checker拡張機能を使ってXPathを検証し、エラーは表示されません。私はその後、XPathが認識されていることを確認するためにSelenium IDEで試してみます。 IDEでも要素が認識されます。しかし、セレンRCはそれを認識しません。これを修正するために私ができることはありますか?

具体的には、私はによって与えられた特定のエリアをクリックしようとしている:

html/body/form/div[@id='someid1']/div[@class='someClass']/div[@id='someid2']/div[@id='someid3']/div[@id='someid4']/div[@title='titleOfTheElement'] 

その後、私も試してみました:

//div[@title='titleOfTheElement'] 
xpath=//div[@title='Automated User'] 
xpath=/descendant::div[@title='Automated User'] 
まだ

何もありません!

1)誰かが間違っている可能性がありますか、またはセレンがXPathに問題があることが分かっているかどうかを教えてください。

2)セレンRCの見た目に役立つアドオン(XPathチェッカーに似ています)はありませんか?このようにして、RCがXPathを認識するかどうかを確かめることができます。

おかげで、
ムゲンここ

はセレンコードです:私は(他のいくつかのロケータを意味する)ページ上の他の場所をクリックした場合、最後のステップで今すぐ

selenium.click("somelink"); 
selenium.waitForPageToLoad("30000"); 

boolean flag=false 
    do{ 
    if (selenium.isTextPresent("Some text on the page which loads last")) 
    { 
     flag=true 
    } 
    }while(flag=false); 


selenium.click("locator for area which is driving me crazy"); 

クリックは機能します。

エリアのHTMLは次のようになります。

<div id="someid1" style="overflow: hidden;"> 
<div id="someid2" title="title1" class="someclass">title1</div> 
<div id="someid3" title="title2" class="someclass">title2</div> 
<div id="someid4" title="required title" class="someclass">required title</div> 
<div id="someid5" title="title3" class="someclass">title3</div> 
<div id="someid6" title="title4" class="someclass">title4</div> 
<div id="someid7" title="title5" class="someclass">title5</div></div> 

おかげで、この覗くための負荷を。 :-)

+0

Selenium RCコマンドを投稿できますか?クリックコマンドを送信する前にページが読み込まれるのを待っていますか? –

答えて

6

title属性を持つdivを持つのが正しいかどうかわかりません。要素の場所を特定するために使用できる別の属性はありませんか?それが動作する場合にはとにかく

は、ここでのロケータのCSSのバージョンでは、です:

css=div[title='Automated User'] 
+0

お返事ありがとうございました! CSSを使用して偉大な作業です!私はcss = div [@ title = 'Automated User']として間違ってCSSをしようとしていた。 – Mugen

+0

うまくいきました:) – Santi

0

ページがRCで正しくロードされていることを確認しますか?つまり、ブラウザが開いていてページが読み込まれていますか?

+0

Jeremyにお返事いただきありがとうございます。はい、ページが正しく表示されています。他の分野のXPathはうまく動作しているようです。その特定の領域では、それはまったく認識しません。 この特定の領域で異なる要素をクリックすると、ページ内の別のdivにいくつかの変更が加えられます。これは問題に関連していますか? – Mugen

2

のFirefox上でSeleniumテストを実行しているときに我々は一度XPath式の問題がありました。

  • 異なるブラウザで同じテストを実行しましたか?
  • 私はすべての要素名をアスタリスク記号(*)で置き換えたことを覚えました。すなわち、

    // * [ID @ = 'someid1']/* [クラス@ = '工ass']/* [ID = 'someid2' @]

2

あなたの例から、あなたはできるはずです

selenium.click("id=someid4"); 

私はIDが動的に生成されていると思われますが、このメソッドを使用することはできません。

私は、次のXPathは動作しませんなぜ何らかの理由を見ることができない。それは次のようになりターゲットに

selenium.click("//div[@title='required title']"); 

その他の方法:

selenium.click("css=div[title='required title']"); 
selenium.click("css=.someclass:nth-child(4)"); //must be 4th child of parent element 

divの実際のターゲット要素ですか?クリックイベントに応答しますか?クリックに反応する子要素がある場合は、その要素を対象とする必要があります。また、次のコマンドを使用してトラブルシューティングを試すこともできます。

mouseDown 
mouseUp 
fireEvent 
+0

ありがとうございました。私のdivは実際のターゲットではありませんでした。「反応しませんでした」というのは、セレンがネストされたというタグを押す必要がありました。 – Blundell

0

スクリプトがウェブページより高速である可能性があります。しばらくお待ちください。 あなたのようにご利用いただけますwaitForCondition("selenium.isElementPresent("ElementID")","20000");

xpath.tryでこれはあなたを助けるかもしれないと思われます。

関連する問題