Como selecionar o último elemento no Selenium Webdriver usando Javascript?

Aug 31 2020

Eu crio um script para verificar se um elemento foi adicionado com sucesso. O elemento adicionado sempre no final da página ou se torna o último elemento em um div diferente. Estou usando o selênio webdriver e javascript. Aqui está o código 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>

Eu tentei isso

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)

Mas eu tenho erro element.last() is not function

Alguém pode me ajudar? Não consigo encontrar referências sobre selênio webdriver em javascript, a maioria delas usando java. ss

Respostas

DebanjanB Aug 31 2020 at 13:25

Como o elemento adicionado sempre se torna o último elemento a verificar o elemento adicionado, você precisa localizar o last-childdo elemento pai que você não nos mostrou no HTML dentro da questão. Portanto, para localizar o, last-childvocê pode usar a seguinte Estratégia de Localizador baseada em seletores de CSS :

  • Usando 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

Aqui, quando você deseja usar o último ou o primeiro elemento, temos que obter um array de elementos. Em vez de findElement, podemos usar findElements

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

deixe entity_value = esperar new_entity.getAttribute ('valor'); expect (entity_value) .to.be.eq (entity_name);