2017-04-14 1 views
1

j'ai le code html ci-dessous dans laquelle essaie de trouver tous les svg éléments à l'intérieur div.container-fluid.container-results >div >ul >li seulement et je ne veux pas que les éléments svg à l'intérieur div.container-fluid.container-results >div >ul >div.result-controls pour un paramètre row_number donné où row_number représente div[contains(@class,'invoice-result-row')][contains(@id,#{row_number.to_i-1})]sélénium Ruby WebDriver trouver des éléments svg spécifiques

<div class="container-fluid container-results"> 
    <div class="invoice-result-row" id="0"> 
     <ul> 
     <li class="invoice-process-status-column"> 
      <a href="javascript:void(0)" title="Submitted"> 
       <svg class="glyphicon-upload-green SubmittedIcon" viewBox="0 0 100 100"> 
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use> 
       </svg> 
      </a> 
     </li> 
     <li class="invoice-process-status-column"> 
      <a href="javascript:void(0)" title="Sent"> 
       <svg class="glyphicon-upload-green SentIcon" viewBox="0 0 100 100"> 
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use> 
       </svg> 
      </a> 
     </li> 
     <li class="invoice-process-status-column"> 
      <a href="javascript:void(0)" title="Pending"> 
       <svg class="glyphicon-upload-green PendingIcon" viewBox="0 0 100 100"> 
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use> 
       </svg> 
      </a> 
     </li> 
     <li class="invoice-file-label-column"><span>validated.txt</span></li> 
     <li class="invoice-client-company-column"><span>QA-CP-PP-TRUNK</span></li> 
     <li class="invoice-reference-column"><span>T12345638800</span></li>   
     </ul> 
    </div> 
    <div class="invoice-result-row" id="1"> 
     <ul> 
     <li class="invoice-process-status-column"> 
      <a href="javascript:void(0)" title="Processing"> 
       <svg class="glyphicon-spin ProcessingIcon" viewBox="0 0 100 100"> 
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#refresh"></use> 
       </svg> 
      </a> 
     </li> 
     <li class="invoice-process-status-column"> 
      <a href="javascript:void(0)" title="Delivered"> 
       <svg class="glyphicon-upload-green DeliveredIcon" viewBox="0 0 100 100"> 
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use> 
       </svg> 
      </a> 
     </li> 
     <li class="invoice-file-label-column"><span>Pending.txt</span></li> 
     <li class="invoice-client-company-column"></li> 
     <li class="invoice-reference-column"></li> 
     <div class="result-controls"> 
      <li class="invoice-delete-column"></li> 
     </div> 
     </ul> 
    </div> 
    <div class="invoice-result-row" id="2"> 
     <ul> 
     <li class="invoice-process-status-column"> 
      <a href="javascript:void(0)" title="Submitted"> 
       <svg class="glyphicon-upload-green SubmittedIcon" viewBox="0 0 100 100"> 
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use> 
       </svg> 
      </a> 
     </li> 
     <li class="invoice-file-label-column"><span>validated - Copy.txt</span></li> 
     <li class="invoice-client-company-column"><span>QA-CP-PP-TRUNK</span></li> 
     <li class="invoice-reference-column"><span>T12345638799</span></li> 
     <div class="result-controls"> 
      <div class="attachment"> 
       <li class="invoice-add-attachment-button-column"><a><button>ADD ATTACHMENTS</button></a></li> 
       <input type="file" multiple="" style="display: none;"> 
      </div> 
      <li class="invoice-sign-button-column"><a href="javascript:void(0)"><button>SIGN</button></a></li> 
      <li class="invoice-draft-button-column"><a><button>DRAFT</button></a></li> 
      <li class="invoice-delete-column"> 
       <a href="javascript:void(0)" title="Delete"> 
        <svg class="glyphicon-trash deleteIcon" viewBox="0 0 100 100"> 
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#trash"></use> 
        </svg> 
       </a> 
      </li> 
     </div> 
     </ul> 
    </div> 
</div> 

Je suis en train de faire cela en Ruby en utilisant Selenium wendriver comme ci-dessous mais son lancer no such element: Unable to locate element: {"method":"tag name","selector":"svg"} sur les éléments li qui ne possède pas l'élément svg. Je viens juste de commencer la programmation de ruby ​​avec du sélénium. Quelqu'un peut-il m'aider à résoudre ce problème?

+0

Pouvez-vous essayer d'utiliser un xpath pour 'SubmittedIcon' comme' 'svg [@ class = 'glyphicon-upload-green SubmittedIcon']' –

+0

'div.container-fluid.container-résultats> div> ul> li> a> svg' cela vous mènera à svg mais il ne sera pas unique –

+0

@KishanPatel Je ne veux pas que ça code dur, il faut qu'il soit assez générique pour que mon script sélénium puisse être exécuté sur des pages différentes ... oui j'ai essayé la même chose 'div.container-fluid.container-résultats> div> ul> li> a> svg' mais je ne pouvais pas éliminer les autres éléments' svg' non désirés – RanPaul

Répondre

1

Conformément à notre discussion, voici le chemin:

driver.find_elements(:xpath => getCPLineSelector).each do |tag| 
icon = tag.find_element(:tag_name, "svg").attribute('class') 
puts "svg class = #{icon}" 
end 

def getCPLineSelector() 
".//div[contains(@class,'container-results')]//div[contains(@class,'invoice- 
result-row')][contains(@id,#{row_number.to_i-1})]//ul/li/a" 
end 
1

Vous pouvez le faire avec un sélecteur CSS, "[id='2'] > ul > li > a > svg". Jetez que dans une fonction, passer dans le numéro de la ligne, et il ressemble à ceci

def find_svg(rowNo) 
    driver.find_element(:css, "[id='#{rowNo}'] > ul > li > a > svg") 

Espérons que je suis la bonne syntaxe ... Je ne sais pas Ruby.