Come ottenere una tabella HTML riga con il Capibara

Sto cercando di scansione per righe in una tabella HTML con parziale href xpath e di eseguire ulteriori test con la riga di altri valori di una colonna.

  <div id = "blah">
  <table>
    <tr>
      <td><a href="afile?key=HONDA">link</a></td>
      <td>29 33 485</td>
      <td>45.2934,00 EUR</td>
    </tr>
    <tr>
      <td><a href="afile?key=HONDA">link</a></td>
      <td>22 93 485</td>
      <td>38.336.934,123 EUR</td>
    </tr>
    <tr>
      <td><a href="afile?key=something_else">link</a></td>
      <td>394 27 3844</td>
      <td>3.485,2839 EUR</td>
    </tr>    
  </table>
  </div>

In cetriolo-jvm fase di definizione, ho eseguito questo molto facilmente, come di seguito (io sono più a suo agio con Ruby)

@Given("^if there are...$")
public void if_there_are...() throws Throwable {
            ...
            ...
           baseTable = driver.findElement(By.id("blah"));
           tblRows = baseTable.findElements(By.tagName("tr"));

        for(WebElement row : tblRows) {                                                 
            if (row.findElements(By.xpath(".//a[contains(@href,'key=HONDA')]")).size() > 0) {
                List<WebElement> col = row.findElements(By.tagName("td")); 
                tblData dummyThing = new tblData();
                dummyThing.col1 = col.get(0).getText();
                dummyThing.col2 = col.get(1).getText();
                dummyThing.col3 = col.get(2).getText();
                dummyThing.col4 = col.get(3).getText();
                dummyThings.add(dummyThing);
            }
        }

Io sono all’oscuro di qui

page.find('#blah').all('tr').each { |row|
  # if row matches xpath then grab that complete row
  # so that other column values can be verified
  # I am clueless from here
  row.find('td').each do { |c|

  }
  page.find('#blah').all('tr').find(:xpath, ".//a[contains(@href,'key=HONDA')]").each { |r|
    #we got the row that matches xpath, let us do something
  }
}

OriginaleL’autore Bala | 2013-12-11

One Reply
  1. 15

    Penso che si sta cercando di fare:

    page.all('#blah tr').each do |tr|
      next unless tr.has_selector?('a[href*="HONDA"]')
    
      # Do stuff with trs that meet the href requirement
      puts tr.text
    end
    #=> link 29 33 485 45.2934,00 EUR
    #=> link 22 93 485 38.336.934,123 EUR

    Questo in sostanza dice:

    1. Trovare tutti trs nell’elemento con id ‘bla’
    2. Scorrere ogni tr
    3. Se il tr non dispone di un collegamento a href contenente HONDA, ignorarlo
    4. Altrimenti, in uscita il testo della riga (che soddisfa i criteri). Si potrebbe fare quello di cui hai bisogno con il tr qui.

    Si potrebbe anche usare xpath per il crollo di cui sopra in una singola istruzione. Tuttavia, io non credo che sia leggibile:

    page.all(:xpath, '//div[@id="blah"]//tr[.//a[contains(@href, "HONDA")]]').each do |tr|
      # Do stuff with trs that meet the href requirement
      puts tr.text
    end
    #=> link 29 33 485 45.2934,00 EUR
    #=> link 22 93 485 38.336.934,123 EUR

    Qui è un esempio di come controllare ogni riga corrispondente link url e i valori di colonna:

    page.all('#blah tr').each do |tr|
      next unless tr.has_selector?('a[href*="HONDA"]')
    
      # Do stuff with trs that meet the href requirement
      href = tr.find('a')['href']
      column_value_1 = tr.all('td')[1].text
      column_value_2 = tr.all('td')[2].text
    
      puts href, column_value_1, column_value_2
    end
    #=> file:///C:/Scripts/Misc/Programming/Capybara/afile?key=HONDA
    #=> 29 33 485
    #=> 45.2934,00 EUR
    #=> file:///C:/Scripts/Misc/Programming/Capybara/afile?key=HONDA
    #=> 22 93 485
    #=> 38.336.934,123 EUR
    Ciao Ko, come faccio a ottenere l’href del link che corrisponde xpath. Ho bisogno di controllare alcune cose con i valori della colonna della riga corrispondente. Così, come posso fare per ottenere che nelle colonne corrispondenti(valori)?
    È possibile utilizzare il normale finders a ispezionare il tr. Un esempio è stato aggiunto.
    Ho Selenio errore Element not found in the cache - perhaps the page has changed since it was looked up.... Ma funziona se ho semplicemente puts tr.text rimozione tr.has_selector?....
    Utilizzando il xpath singola istruzione soluzione funziona e sembra essere la soluzione per ora. Grazie

    OriginaleL’autore Justin Ko

Lascia un commento