2017-11-03 5 views
0

次のhtmlからhref値<a ng-href=を抽出しようとしています。広告申込情報リストからhref値を抽出します

値 "BJ11TFZ"は動的です。

多くのLIを持つULです。これがリストの最初の項目になります。 私はので、私はli要素のクラス名が一意である場合は、あなたが使用できる

<!-- Begin Results List --> 
    <ul id="resultsLists" class="o-media-list c-animate c-animate--show" ng-show="rc.results.vehicles.length" style=""> 
    <li id="BJ11TFZ" class="c-animate c-animate--repeat u-pb ng-scope" ng-repeat="car in rc.results.vehicles track by car.registration" style=""> 
     <div class="o-media c-card c-card--hover c-card__block u-p-0 u-shadowed u-shadowed--hover"> 
     <div class="o-media__left o-grid__col-sm-5 o-grid__col-xs-12 u-p-0 u-no-float--sm"> 

      <a ng-href="/used-car/FORD/FIESTA/BJ11TFZ" class="o-embed-responsive o-embed-responsive--16by9 o-media__object c-rollover" ng-click="rc.viewCar(car, $index)" href="/used-car/FORD/FIESTA/BJ11TFZ"> 
      <img ng-src="//images.mycar.com/BJ/11/BJ11TFZ/BJ11TFZ-used-FORD-FIESTA-DIESEL-HATCHBACK-1-6-TDCi-95-Titanium-3dr-Diesel-Manual-RED-2011-HR-S-01.jpg" alt="FORD FIESTA" class="o-embed-responsive__item c-rollover__image" cs-src-responsive="[ [ 'small', '//images.mycar.com/BJ/11/BJ11TFZ/BJ11TFZ-used-FORD-FIESTA-DIESEL-HATCHBACK-1-6-TDCi-95-Titanium-3dr-Diesel-Manual-RED-2011-HR-M-01.jpg' ], [ 'retina', '//images.mycar.com/BJ/11/BJ11TFZ/BJ11TFZ-used-FORD-FIESTA-DIESEL-HATCHBACK-1-6-TDCi-95-Titanium-3dr-Diesel-Manual-RED-2011-HR-M-01.jpg' ] ]" src="//images.mycar.com/BJ/11/BJ11TFZ/BJ11TFZ-used-FORD-FIESTA-DIESEL-HATCHBACK-1-6-TDCi-95-Titanium-3dr-Diesel-Manual-RED-2011-HR-M-01.jpg"> 
      </a> 
     </div> 
     <div class="o-media__body o-media--middle c-card"> 

      <label class="c-option c-option--stacked u-pos-t-r u-text-primary u-m-sm u-hidden-print"> 
      <input checklist-value="car.registration" ng-model="checked" class="ng-scope ng-pristine ng-untouched ng-valid" checklist-model="search.savedVehicles" type="checkbox"> 
      <i class="c-option__heart"></i> 
      <span class="u-text-70">Save</span> 
      </label> 
      <div class="c-card__block" ng-click="rc.viewCar(car, $index)"> 
    <strong ng-if="car.vehicleCapDetails.capMakeName != 'MERCEDES-BENZ'" class="ng-binding ng-scope"> 
       FORD FIESTA 
      </strong> 
      <div class="u-text-strong u-text-small ng-binding">1.6 TDCi [95] Titanium 3dr, 2011</div> 


    <div class="u-text-bold u-lh-1 u-pt-sm ng-scope" ng-if="!search.criteria.fromPrice &amp;&amp; !search.criteria.toPrice"> 
       <small>From</small> <span class="u-text-125 ng-binding">£114</span> <small>monthly or</small> 
       <span ng-if="!car.vehiclePrice.exVatPrice" class="ng-binding ng-scope">£5,071</span> 

      </div> 
      <div class="u-text-70 u-text-muted u-text-nowrap u-py-sm"> + £149 Admin Fee</div> 
      <ul class="o-list-inline u-text-70 u-text-muted"> 
       <li class="o-list-inline__item u-pl-0 u-pr-sm"> 
       <span ng-if="car.mileage > 1000" class="ng-binding ng-scope"> 
        67k miles 
       </span> 

       </li> 
       <li class="o-list-inline__item u-pl-0 u-pr-sm ng-binding"> 
       Diesel 
       </li> 
       <li class="o-list-inline__item u-pl-0 u-pr-sm ng-binding"> 
       Manual 
       </li> 
       <li class="o-list-inline__item u-pl-0 u-pr-sm ng-binding"> 
       Red 
       </li> 

       <li class="o-list-inline__item u-pl-0 ng-binding"> 
       <i class="i-icon i-icon--location"></i>&nbsp;Norton<span class="u-text-strong ng-binding ng-scope" ng-if="car.distance">, 2mi</span> 
       </li> 
      </ul> 
      </div> 
     </div> 
     </div> 

答えて

1

をクリックするURLを構築することができ、それをキャプチャすることができるようにしたい:

 WebElement resultsLists= driver.findElement(By.id("resultsLists")); 
     WebElement el=resultsLists.findElement(By.xpath(".//li[@class='c-animate c-animate--repeat u-pb ng-scope']/div/div/a")); 
     System.out.println(el.getAttribute("href")); 

そうでない場合は、あなたが使用することができます要素にアクセスするためのインデックス最初の1である場合:

WebElement resultsLists= driver.findElement(By.id("resultsLists")); 
    WebElement el=resultsLists.findElement(By.xpath(".//li[1]/div/div/a")); 
    System.out.println(el.getAttribute("href")); 
+0

は私が望んでいた正確に何をしたこと、あなたにダビデをありがとうございます。 :-) 私はもう1つのことを私に得ることができます: –

+0

@マークHお手伝いをしてください。この回答または他の誰かがあなたの問題を解決した場合は、受け入れ済みとマークしてください:stackoverflow.com/help/someone-answers他の問題については、別の質問をする必要があります:) –

0

私はあなたがそのようなCSSセレクタを使用して要素を取得することができると思う:.o-embed-responsive.o-embed-responsive--16by9.o-media__object.c-rollover - それはあなたのfindElement-メソッドの引数です。

0

CSSを簡略化してみてください。それは一意の識別子の欠如のためにある構造を仮定し、それは残念です。優れたテスト容易性と安定した自動化スイートのために、独自のクラス/ IDを開発者(または開発者の場合は自分自身)に問い合わせることができます。

、について説明:それはlic-animateを持つクラスを見つけ、すぐ下に、idresultsListsulに移動します。次に、a(ハイパーリンク)をその下の「どこでも」見つける。

WebElement link= driver.findElement(By.css("ul#resultsLists>li.c-animate a")); 
System.out.println(link.getAttribute("href")); 

のexplainationは:下に "どこでも" divo-media__leftを持つクラスを見つけ、idresultsListsulに移動します。その後すぐにa(ハイパーリンク)が「すぐ」に見つかります。次のコードを考慮することができる<a ng-href="/used-car/FORD/FIESTA/BJ11TFZ" ... >タグから動的である「BJ11TFZ」をng-hrefhref値を抽出するために

WebElement link= driver.findElement(By.css("ul#resultsLists div.o-media__left>a")); 
System.out.println(link.getAttribute("href")); 
0

WebElement my_model = driver.findElement(By.xpath("//ul[@id='resultsLists' and @class='o-media-list c-animate c-animate--show']//following::a[1]")); 

//Extracting ng-href value 
System.out.println(my_model.getAttribute("ng-href")); 

//Extracting href value 
System.out.println(my_model.getAttribute("href")); 
関連する問題