Home > Blockchain >  How to invoke all option values from select with cypress/javascript?
How to invoke all option values from select with cypress/javascript?

Time:06-29

i am trying to get all values under select tag in order to have an array. This is my code:

cy.get('[data-tab-name-prefix="selectedFonds[0]]')
  .scrollIntoView()
  .should('be.visible')
  .find('[name="selectedFonds[0][name]"]')
  .find('option')
  .invoke('attr', 'value').then($options => {
    cy.log($options)
})

<div data-tab-name-prefix="selectedFonds[0]"> 
       <div class= something>
       <div class= something else>
          <select class=form-control name="selectedFonds[0][name]">
              <option value="first value"> First Value </option>
              <option value="second value"> Second Value </option>
              <option value="third value"> Third Value </option>
              <option value="forth value"> Forth Value </option>
          </select>
       </div>
       </div>

    </div>

The problem is that it returns only the first option... not all of them.

CodePudding user response:

My suggestion would be to target the element with the data attribute then do within(). Then target the select element and do children(). Followed by a each() block to iterate over every option element.

const values = ['first value', 'second value', 'third value', 'fourth value']
cy.get('[data-tab-name-prefix="selectedFonds[0]]')
.scrollIntoView()
.should('be.visible')
.within( ($el) => {
  cy.get('select')//based on your HTML you have only one select inside this div
  .should('be.visible')
  .children()
  .each( ($el, index) => {
    cy.get($el)
    .should('have.value', values[index])
  })
})
  • Related