Come selezionare l'ultimo elemento in Selenium Webdriver usando Javascript?

Aug 31 2020

Creo uno script per verificare che un elemento sia stato aggiunto con successo. L'elemento aggiunto sempre alla fine della pagina o diventa l'ultimo elemento in div differenti. Sto usando selenio webdriver e javascript. Ecco il codice HTML

<div class="row">
<div class="form-group col-sm-2 col-xs-12">
        <label>Entity Name</label>
        <input value="ttax" class="form-control entity-name" disabled="">
</div>
</div>
<div class="row">
<div class="form-group col-sm-2 col-xs-12">
       <label>Entity Name</label>
       <input value="Room" class="form-control entity-name" disabled="">
</div>
</div>

Ho provato questo

let new_entity = await driver.findElement(By.css("div:nth-child(2) > div.form-group.col-sm-2.col-xs-12 > input").last()
let entity_value = await new_entity.getAttribute('value')
expect(entity_value).to.be.eq(entity_name)

Ma ho ricevuto un errore element.last() is not function

Qualcuno può aiutarmi? Non riesco a trovare riferimenti sul webdriver selenio in javascript, la maggior parte dei quali utilizza java. ss

Risposte

DebanjanB Aug 31 2020 at 13:25

Come l'elemento aggiunto diventa sempre l'ultimo elemento per verificare l'elemento aggiunto è necessario individuare l' last-childdel elemento genitore , che non ci avete mostrato nel codice HTML all'interno della domanda. Quindi per individuare last-childè possibile utilizzare la seguente strategia di localizzazione basata sui selettori CSS :

  • Utilizzando css :

    let new_entity = await driver.findElement(By.css("immediateParentTag div:last-child > div.form-group.col-sm-2.col-xs-12 > input"))
    
issuesolverin Aug 31 2020 at 12:43

Qui, quando vuoi usare l'ultimo o il primo elemento, dobbiamo ottenere un array di elementi. Invece di findElement, possiamo usare findElements

let new_entity = await driver.findElements(By.css("..")).last();

let entity_value = await new_entity.getAttribute ('value'); aspettarsi (entity_value) .to.be.eq (entity_name);