0

Selenium Webdriver スペシャリストの皆様

私はこのフレームワークに不慣れで、販売物件リスト Web サイトからすべての検索結果を検索/検索する方法について少しアドバイスが必要でした。以下は、Selenium Webdriver を使用してすべてのプロパティを正常に検出した作業コードですが、この Web サイトから返されるすべての結果を取得するために findElements(by...) を使用する方法がわかりません。

    WebDriver driver = new FirefoxDriver();

    driver.get("http://www.domain.com.au/?mode=buy");

    // Enter the query string "3000"        
    WebElement query = driver.findElement(By.xpath(".//*[@id='ctl00_SearchMoreCriteria_Radar_searchToBuy']"));        
    query.sendKeys("3000");        

    WebElement searchButton = driver.findElement(By.xpath(".//*[@id='ctl00_SearchMoreCriteria_Radar_Search']")); 
    searchButton.click();  

    // Sleep until the div we want is visible or 5 seconds is over        
    long end = System.currentTimeMillis() + 5000;        

このクエリについて誰かアドバイスをいただけますか? また、返されたすべての結果を検索/検索する前に、一時停止メカニズムを含めたいですか?

どうもありがとう、

ジャック


Santoshsarma さん、ご返信ありがとうございます。しかし、返された次の Web クエリ ページの出力スニペットにあなたの提案を適用するのに苦労しています。

     <h3>
        <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypAddress" href="/Property/For-Sale/Penthouse/VIC/Melbourne/?adid=2009775619">602/73 Flinders Lane, Melbourne</a></h3>
     <dl class="cN-featDetails">
        <dt class="proptype">Property type</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddPropertyType" class="propertytype type-house" title="Property type: House">House</dd>
        <dt class="bedrooms">Bedrooms</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddBedrooms" class="bedrooms" title="Bedrooms">3</dd>
        <dt class="bathrooms">Bathrooms</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddBathrooms" class="bathrooms" title="Bathrooms">4</dd>
        <dt class="carspaces">Car spaces</dt>
        <dd id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_ddCarSpaces" class="carspaces" title="Car spaces">2</dd>
    </dl>
</div>
<div class="main-wrap">
    <ul class="photo cfix">
        <li>
            <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypMainThumb" tabindex="-1" class="contain" href="/Property/For-Sale/Penthouse/VIC/Melbourne/?adid=2009775619"><img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_imgMainThumb" title="602/73 Flinders Lane, Melbourne" src="http://images.domain.com.au/img/2012625/18127/2009775619_1_PM.JPG?mod=120925-150000" alt="Main photo of 602/73 Flinders Lane, Melbourne - More Details" style="border-width:0px;" /></a>
        </li>

        <li class="last">
            <a id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypSecondThumb" tabindex="-1" class="contain" href="/Property/For-Sale/Penthouse/VIC/Melbourne/?adid=2009775619"><img id="ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_imgSecondThumb" title="602/73 Flinders Lane, Melbourne" src="http://images.domain.com.au/img/2012625/18127/2009775619_2_PM.JPG?mod=120913-125823" alt="Photo of 602/73 Flinders Lane, Melbourne - More Details" style="border-width:0px;" /></a>
        </li>
    </ul>

List AllSearchResults=driver.findElements(By.id("ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypAddress"));

ctl01 には、すべての検索結果を取得するために循環する必要があるインデックスがあり、他の同様の脅威によると遅くなります。WebElement で findElement() を使用してその子だけを検索するより良い方法はありますか?しかし、ルートの場所がわかりません。このアプローチが機能するかどうかを確認できますか?次の URL クエリ結果ページからの結果リストのルートを特定できますか: http://www.domain.com.au/Search/buy/Property/Types/アパート-ユニット-フラット/デュプレックス/ハウス/新しい-アパート-オフザプラン/新しい-ホーム-デザイン/新しい-ハウス-ランド/ペントハウス/セミデタッチド/スタジオ/テラス/タウンハウス/ヴィラ/ステート/VIC/ Area/Inner-City/Region/Melbourne-Region/Suburb/Melbourne/?bedrooms=1&bathrooms=1&carspaces=1&from=450000&searchterm=3000&pois=PriSchl|1|2|2000

この分野での経験不足のため、ご辛抱いただければ幸いです。

4

3 に答える 3

0

ID プロパティを使用したカスタム xpath の助けを借りて解決できるかもしれません。

コードは次のようになります。

List AllSearchResults=driver.findElements(By.xpath("//*[contains(@id='SrchResLst_rptResult')]"));

またはこのように:

List AllSearchResults=driver.findElements(By.xpath("//*[contains(@id='ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_')]"));

ここで * を使用したのは、一部の検索結果にタグ<a>とタグの組み合わせが含まれているためです。<dd>

xpath は、ID プロパティの値として「SrchResLst_rptResult」文字列を含むすべての要素を検索します。

于 2014-06-14T07:50:28.273 に答える
0

findElements メソッドは、同じロケーターを持つ WebElements のリストを返します。

> List<WebElement> AllSearchResults=driver.findElements(By.id("value"));

上記のリストをループで実行して、個々の検索結果を取得します。

  for(WebElement eachResult:AllSearchResults)
   {
           eachResult.click(); 
   }
于 2012-09-20T16:41:07.350 に答える
0

h3それでも解決しない場合は、リンクを見つけるために次のことを試してください。

(new WebDriverWait(driver, 10)).until(ExpectedConditions
   .visibilityOfElementLocated(
   By.id("ctl00_ctl00_Content_Content_SrchResLst_rptResult_ctl01_EliteListingTemplate_hypAddress")));

このコードは、指定された要素を 10 秒間待機してから、TimeOutException をスローします。

よろしく、クリスチャン

于 2013-01-16T10:01:23.683 に答える