Условные случаи в кипарисе - PullRequest
0 голосов
/ 07 сентября 2018

У меня проблема с написанием тестов для условных случаев. Один из тестов использует функцию api in 'before' (beforeAll) для создания объекта, а затем в тесте созданный объект иногда не отображается в результатах поиска. Я раньше использовал кукловода. Я могу позволить странице перезагрузиться, пока объект не появится в результатах поиска. Однако я не могу сделать то же самое. Я думал об использовании cy.get и затем проверял ответ. Например, (cy.get('sth').then(s1 => {do something like cy.reload()})).

Затем я обнаружил, что s1 всегда остается неизменным после перезагрузки. Итак, я застрял. Надеюсь, кто-нибудь подаст мне руку на это. Если описание не понятно, пожалуйста, мой другой пост ниже. Спасибо

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Мой плохой. Я не очень хорошо объяснил свою проблему. Проблема не в функции before (). В функции before () я вызываю post API для создания людей. Затем я буду использовать тех людей, которые были созданы в before (), в каждом из моих тестов. Код будет выглядеть так:

before(()=> {createPerson(); cy.visit('mywebsite); login();} )
it('search person I created by calling api', () => {
 cy.get('.search')
   .type('person's name{enter}');
 cy.get(':nth-child(1) > resulttable').click();

Вот проблема. Я не могу найти человека в результатах поиска, так как данные требуют времени для передачи. Затем тест не пройден. Итак, мне нужно перезагрузить страницу (страница поиска страницы результатов), позвонив cy.reload(); Однако я не знаю, сколько нужно перезагрузить, чтобы позвонить этому человеку, чтобы он появился в результатах поиска.

Текущее решение, которое я использовал, - cy.wait(30000). подождите 30 секунд.

Итак, мне интересно, как я собираюсь поступить сейчас.

0 голосов
/ 21 сентября 2018

Извините, но проблема в вашей предыдущей функции. Запустить его нужно только после того, как вы закончите подготовку среды к запуску теста.

const  createPerson = (params, done)=>{
  cy.request({// create people here}).then(({people})=>{
    done(undefined, {people});
  })

}

before((done)=> {
  createPerson({}, (err, {people})=>{
    cy.visit('mywebsite);
    login({}, done); // this should be async as well
  }); 
})

it('search person I created by calling api', () => {
 //if you data is not cached, at this point you will have the people populated in your screen.
 cy.get('.search')
   .type('person's name{enter}');
 cy.get(':nth-child(1) > resulttable').click();
0 голосов
/ 12 сентября 2018

Исходя из того, что я собираю из вашего поста, я думаю, что-то вроде этого может помочь:

cy.get('some.selector').then(elem => {
    // ...
});

cy.reload();

cy.get('some.selector').then(elem => {
    // run code on element after reloading...
});

Если это не отвечает на ваш вопрос, рассмотрите возможность создания минимального, полного и проверяемого примера .

...