Скопируйте файл и пересчитайте новое состояние

#javascript #copy #cypress

#javascript #Копировать #cypress

Вопрос:

Я борюсь с чем-то на работе. Я новичок, поэтому извините, если я спрошу что-нибудь простое. Я не смог найти его лично в Интернете, поэтому я надеюсь, что вы можете предоставить мне (легко понятную) информацию.

Я создаю автоматический тест. Я использую Cypress.

На моей работе мы имеем следующую ситуацию;

1) Имеется 1 файл. Мы хотим скопировать это. Итак, мы должны сначала посчитать начальное состояние (1 файл)

2) Мы скопируем этот файл

3) Теперь у нас есть 2 файла. Мы хотим посчитать, что действительно существует 2 файла

У меня есть следующий код для этого;

 // count initialstate (1 file) = 
let InitialStateCopy = 
cy.getScoped('catalog-> item:case_type:link').contains('filename').should('have.length', 1 ) 

// press copy

// copy the file, execute actions here

// check if file is copied correctly (2 files)

let NewState = 
cy.getScoped('catalog-> item:case_type:link').contains('filename').should('have.length', 2 ) 
  

Я получаю сообщение

CypressError: cy.contains() не может быть передан параметр длины, потому что он всегда возвращает только 1 элемент.

И я вижу, что Cypress находит только 1 элемент.

Кто-нибудь знает, как я могу посчитать, сколько там объектов? Какой код мне следует использовать для этого? В принципе, я просто хочу знать, как я могу подсчитывать элементы на странице.

Ответ №1:

cy.contains('blah') автоматически подтвердит, что элемент, содержащий blah , существует:

.contains() автоматически повторит попытку до тех пор, пока элемент (ы) не будет существовать в DOM.

Таким образом, вам не нужно делать .should('have.length', 1) , чтобы утверждать это. .contains Сам выполняет неявное утверждение.

Cypress пытается предупредить вас, что .contains возвращает только 1 элемент, поэтому вы, возможно, делаете что-то неправильно, если пытаетесь указать его длину. В этом случае вы пытаетесь утверждать, что это length есть 2 , что невозможно.

Я не знаю, что у вас такое .getScoped , но это просто использует обычный синтаксис CSS. Чтобы сделать то, что вы пытаетесь сделать, попробуйте этот селектор jQuery, который работает, потому что Cypress использует механизм селектора jQuery:

 cy.get(".catalog .item:contains('filename')").should('have.length', 2)
  

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

1. Ошибка: синтаксическая ошибка, нераспознанное выражение: [data-scope=»catalog-item:case_type:link:contains(«namefile»)»] ожидалось, что «будет иметь длину 2, но получил 0 Это код, который я использовал. Я полагаю, Cypress это не поддерживает?

2. @ErmanGultop ваш селектор выглядит неправильно. попробуйте [data-scope="catalog-item:case_type:link"]:contains("namefile") или :contains("namefile")[data-scope="catalog-item:case_type:link"]

3. Поддерживается: github.com/cypress-io/cypress/issues /…