XPathに問題があるSelenium RC
-
22-07-2019 - |
質問
FirefoxでSelenium RCをChromeモードで使用して、Webアプリケーションのテストケースを自動化しています。 TestNGフレームワークとEclipseを使用してJavaでスクリプトを記述しています。次に要点を説明します。
特定のXPathを認識するためにSelenium RCで問題が発生しています。 FirefoxのXPath-Checker拡張を使用してXPathを検証しますが、エラーは表示されません。次に、Selenium IDEで試して、XPathが認識されていることを確認します。 IDEでさえ要素を認識します。しかし、そのSelenium 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)何が間違っているのか、またはSeleniumがXPathに問題があることがわかっているかどうかを誰かが提案してください
2)Selenium RCが見ているように物事を見るのに役立つアドオン(XPathチェッカーに類似)はありませんか?これにより、RCがXPathを認識するかどうかを確認できます。
ありがとう、
ムゲン
Seleniumコードは次のとおりです。
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>
これを見てくれてありがとう。 :-)
解決
title属性を持つdivを持つのが正しいかどうかわかりません。要素を見つけるために使用できる別の属性はありませんか?
とにかく、動作する場合のロケーターのcssバージョンは次のとおりです。
css=div[title='Automated User']
他のヒント
FirefoxでSeleniumテストを実行すると、XPath式に問題が発生しました。
- 異なるブラウザで同じテストを実行しようとしましたか?
-
すべての要素名をアスタリスク記号(
*
)に置き換えたことを覚えています。すなわち// * [@ id = 'someid1'] / * [@ class = 'someClass'] / * [@ id = 'someid2']
例から、ターゲット要素のIDを使用できるはずです:
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
RCでページが正しく読み込まれていることを確認してください。つまり、ブラウザーが開いてページが読み込まれていることを確認していますか
スクリプトはWebページよりも高速である可能性があります。しばらくお待ちください。
使用できるように waitForCondition(&quot; selenium.isElementPresent(&quot; ElementID&quot;)&quot;、&quot; 20000&quot;);
xpath.tryでweargされていないように見えるので、これが役立つかもしれません。