2

Selenium Webdriver 2 のエキスパートの皆様

このフレームワークは初めてなので、次の Web ページ XHTML スニペットに関する XPath 関連の質問についてアドバイスが必要です。

   <dl class="cN-featDetails">
        <dt class="propertytype">Property type</dt>
        <!-- line 3 --> <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_ddPropertyType" class="propertytype type-house" title="Property type: House">House</dd>
       <!-- line 3a --> <!-- or  class="propertytype type-townhouse"--->
        .......
<div class="main-wrap">
    <div class="s-prodDetails">
        <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_hypMainThumb" class="photo contain" href="/Property/For-Sale/House/LA/St Gabriel/?adid=2009938763">img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_imgMainThumb" title="44 Crown Street, St Gabriel" src="http://images.abc.com/img/2012814/2778/2009938763_1_PM.JPG?mod=121010-210000" alt="Main photo of 44 Crown Street, St Gabriel - More Details" style="border-width:0px;" /></a>
        <div class="description">
             <h4><span id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_lblPrice">Offers Over $900,000 </span></h4>
             <h5>SOLD BY WAISE YUSOFZAI</h5><p>CHARACTER FAMILY HOME... Filled with warmth and charm, is a very well maintained family home in a quiet level street. Be...</p>
    </div>                                                                                                                                                                                                                                                                                                                        
    <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_hypMoreDetails" class="button" href="/Property/For-Sale/House/LA/St Gabriel/?adid=2009938763">More Details</a>
    <dl id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_dlAgent" class="agent">
        <!-- line 19 --> <dt>Advertiser</dt>
        <!-- line 20 --> <dd class="contain">                                       
        <!-- line 20a --> <!-- or class="" -->
            <img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_imgAgencyLogo" title="Carmen Jones Realty" src="http://images.abc.com/img/Agencys/2778/searchlogo_2778.GIF" style="border-width:0px;" />                                                                                                                                                                                                                                                     
        </dd>
    </dl>
</div>

( a ) 要素が存在するかどうかをテストする方法は? たとえば、行 3 または 3a のいずれかが存在しますが、両方は存在しません。findElement() メソッドは、私が回避しようとしている例外を引き起こします。もう 1 つのオプションは、コレクション リストの結果が空かどうかを確認する前に findElements() を使用することです。このアプローチは、それを行うための長い道のりのようです。例外を引き起こすリスクなしに要素の存在を検証する簡単な方法は他にありますか? 次のステートメントは機能しなかったか、例外を引き起こしました:

WebElement resultsDiv = driver.findElement(By.xpath("/html/body/form/div[3]/div[2]/div[1]/h1/em"));
// If results have been returned, the results are displayed in a drop down.
if (resultsDiv.isDisplayed()) {
    break;
}

( b ) findElement() または findElements() の一部としてブール演算子と正規表現を組み込むことにより、いずれかの要素の存在を検証する簡単な方法はありますか? これにより、検索が簡素化されるだけでなく、検索の数が大幅に削減されます。

(c) TagName で Element を検索する場合、XPath 構文を使用できますか。例: driver.findElement(By.tagName("/div[@class='report']/result"));

( d ) driver.findElement(By.xpath("//div[@class='main-wrap']/dl[@class='agent']/dd[@ などの XPath 検索で正規表現を使用することは可能ですか? class='' OR @class='contain']")) 行 20 ~ 20a の場合?

( e ) 直後のノードを参照する方法は? たとえば、現在のノードが

広告主
19 行目で、 の下にあるタイトルを検索する方法。そのクラス名には、「含む」または「なし」の値を指定できます。18 行目に複数のタグが存在する可能性があります。

過去に XML ドキュメントで XPath を使用したことがありますが、Webdriver 2 内で要素を検索する機能を拡張したいと考えています。

どんな援助も非常に素晴らしいでしょう。

どうもありがとう、

ジャック

4

2 に答える 2

3

Zarkonnenの回答を考慮して、(a)ポイントに追加します

 public boolean isElementPresent(By selector)
       {
           return driver.findElements(selector).size()>0;
       }

この方法は、要素がページに存在することを確認するために使用します。

isElementとペアで動作できるisDisplayed()メソッドを含めることもできます。

driver.findElement(By locator).isDisplayed()

ソースに戻る:「詳細」リンクがページに存在するかどうかを確認したいとします。 詳細リンク

String cssMoreDetails = "a[id='ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl04_lstTemplate_hypMoreDetails']";
//and you simply call the described above method
isElementPresent(By.cssSelector(cssMoreDetails));
//if you found xPath then it be
isElementPresent(By.xpath("//*..."));

そして、常にファイアパスで見つかったWeb要素のロケーターを確認するようにしてください

確認

このようにして、要素のxPathを自動的に取得できます。添付の画面をご覧ください。 xPathの生成

于 2012-10-10T14:26:46.260 に答える
1

(a) & (d): |XPath演算子を使用して、同じ式で 2 つの代替パスを指定できます。

(c): byTagName で XPath を使用することはできませんが、特定のノードの任意の子孫を探すために使用できます。 //

(e):およびのようなXPath 軸を使用して、特定のノードに関連するすべてのノードを選択できます。parentfollowing-sibling

これらの指針がお役に立てば幸いです。また、 XPath の作成方法に関するリファレンスとして、優れたSelenium Locator Rosetta Stone ( PDF ) をお勧めします。

于 2012-10-10T14:12:40.763 に答える