Я пытаюсь удалить определенного пользователя и предпочитаю, чтобы тест не прошел, а затем удалил другого пользователя, если нужный мне пользователь не существует.
Проблема в том, что я не могу найти способ проверить, что флажок находится рядом с пользователем, которого я хочу. Я использовал гнездо .each (), чтобы сначала найти пользователя Мэнди Смит, а затем установить флажок с тем же индексом.
Обратите внимание: я пытаюсь удалить пользователя Мэнди Смит, и хотя я могу просто использовать следующий код для ее выбора, в зависимости от того, насколько быстро тест дойдет до этого момента, он может фактически удалить первого пользователя.
Текущий код, удаляющий Мэнди Смит:
// looks for the checkbox related to Mandy Smith User
cy.get('input[type="checkbox"]')
.each(($elem, index) => {
if(index === 2) {
cy.wrap($elem).click({force:true});
}
});
Хотя это обычно захватывает ее, в зависимости от того, как быстро очищаются фильтры, он может выбрать автоматического пользователя для удаления. Я, конечно, не хочу этого, я пытаюсь найти хороший способ проверить индекс, по которому находится Мэнди Смит, и применить это к ее флажку.
Флажок является динамическим, поэтому он будет повторяться в зависимости от того, что было щелкнуто, поэтому я не хочу выбирать точный флажок с его меткой # mat-checkbox-11, поскольку это то, что происходит, когда я смотрю на код, но он был 5 раньше.
Я думал, что это позволит мне найти индекс и применить его к флажку:
// looks for the checkbox related to Mandy Smith User
it(`should select Mandy, through verification that it's her index`, () => {
cy.get('.mat-column-name.ng-star-inserted')
.each(($name, i) => {
if($name === 'Mandy Smith') {
let dex = i;
cy.get('input[type="checkbox"]')
.each(($elem, index) => {
if(index === dex) {
cy.wrap($elem).click({force:true});
}
});
}
});
});
На самом деле вместо этого просто удаляется автоматический пользователь.
Я провел несколько тестов и обнаружил, что строка, которую он возвращает, - это автоматизированный пользователь Мэнди Смит. Итак, хотя я просматриваю таблицу, кажется, что она извлекает оба текстовых поля. Мне что-то не хватает о том, как получить один набор текста, когда все имена классов одинаковы?
Это означает, что он удаляет первого пользователя, поскольку оператор if показывает Мэнди Смит, а затем выбирает первого пользователя, который является автоматическим пользователем, вместо второго пользователя, Мэнди Смит. Может быть, мне нужно знать, как брать текст из каждого класса с тем же именем.
Я не знаю, сейчас я немного не понимаю, как это сделать.
РЕДАКТИРОВАТЬ: Я обнаружил, что могу вызывать текст внутри оператора if, но он никогда не попадает в оператор if. Я проверил, что получилось, и вставил это в свое if, но это все равно не сработало. Вот код, который захватывает элементы innerText и предназначен для сравнения со словом. Есть ли причина, по которой он не оценил бы как истину?
it(`should select Mandy, through verification that it's her`, () => {
cy.get('.mat-cell.cdk-cell.text-capitalize.cdk-column-name.mat-column-name')
.each(($name, i) => {
//let columnText = ($name).invoke('text');
if(cy.get($name).invoke('text') === ' Mandy Smith ') {
cy.log('it made it inside the if');
}
});
});
РЕДАКТИРОВАТЬ 15.07.2020: вот изображение всей таблицы. Желтая стрелка - это ее строка, прямо над ней - строка пользователя 1. Зеленая стрелка - это ее флажок, красная стрелка - ее имя из столбца имени
Спасибо за все сообщения. Я собираюсь повозиться с этим сегодня, протестировать различные комментарии и посмотреть, смогу ли я найти решение. Не стесняйтесь оставлять отзывы, я буду проверять их в течение дня.
Решено. Спасибо всем, вот ответ. Я поговорил по телефону со старшим разработчиком, и, увидев, что я делаю, он объяснил мне несколько вещей. Спасибо @oldschooled за его потрясающий ответ, а также благодаря @ eric99 за то, что он предложил немного подробнее для меня. Вы двое - рок-звезды.
Ответ
it(`should select Mandy Smith with contains only`, () => {
cy.contains('td', 'Mandy Smith').siblings().eq(0).children().eq(0).click();
});
.siblings('td').find('input')
.siblings().eq(0).children().eq(0)
, поскольку он менее подвержен поломке при изменении столбцов. - person Ackroydd   schedule 18.07.2020.check()
и.uncheck()
для флажков, что может быть предпочтительнее.click()
. - person Ackroydd   schedule 18.07.2020