Cypress: Как сохранить цвет CSS в переменной?

#javascript #css #reactjs #testing #cypress

Вопрос:

У меня возникли проблемы с поиском способа сохранения значения цвета CSS в переменной с помощью Cypress в моем приложении React.

Я прекрасно понимаю утверждения:

cy.get('myElement').should('have.css', 'color').and('eq', 'rgb(255, 255, 255)')

Проблема в том, что элемент, который я пытаюсь протестировать, потенциально может быть двух разных цветов при загрузке страницы, поэтому я не могу утверждать, что один цвет, так как другой может быть истинным, и оба считаются vald.

Что я хотел бы, так это иметь возможность хранить текущий цвет в переменной, чтобы я знал, какой цвет я должен утверждать.

Нравится:

 var color = cy.get('myElement').should('have.css', 'color')

if(color === 'rgb(255, 255, 255)') {
    //assert color to be white
}
else {
    //assert color to be black
}
 

или:

 var color = null
cy.get('myElement').then(($element) => {
    color = $element.color()
})

if (color === 'rgb(255, 255, 255)') {
   //assert color to be white
}
else {
   //assert color to be black
}
 

Ответ №1:

У вас почти есть это, но вам нужно использовать .then() или .should() после команд Cypress, которые не дают вам ничего полезного при назначении переменной (первый блок кода)

 cy.get('myElement').should('have.css', 'color')
  .should(color => {
    const white = 'rgb(255, 255, 255)'
    const black = 'rgb(0,0,0)'
    const chartreuse = 'rgb(127, 255, 0)'
    expect(color).to.be.oneOf([white, black, chartreuse])
  }
 

или

 const white = 'rgb(255, 255, 255)'
const black = 'rgb(0,0,0)'
const chartreuse = 'rgb(127, 255, 0)'

cy.get('myElement')
  .should('have.css', 'color')
  .and('be.oneOf', [white, black, chartreuse])
 

Второй блок кода правильно присваивает значение цвета, но время выбрано неправильно — if()...else запуски выполняются до присвоения значения. Также используйте a .then() для корректировки времени

 let color
cy.get('myElement').then(($element) => {
  color = $element.css('color')
})

// other commands...

cy.then(() => {
  expect(color).to.be.oneOf([white, black])
})
 

Или назначьте значение цвета псевдониму (но вы также получаете доступ к значению псевдонима из a .then() ).

Комментарии:

1. Идеально, это именно то, что я искал. Спасибо!