webdriverio 5.7.5 получает ошибку $ (...). setValue не является функцией - PullRequest
2 голосов
/ 21 марта 2019

У меня есть рабочая среда webdriverio, которая выполняется без проблем.Но недавно я включил вызов API REST между ними, и с тех пор все команды wdio, следующие за вызовом API, терпят неудачу с сообщением об ошибке «не является функцией»

Ответ API успешен.Без API те же методы wdio выполняются успешно.

  • Я пытался сравнить сеанс браузера до и после webdriverio, и они оба одинаковы
    • Я пытался переместить вызов API в отдельноефайл.Но после выполнения вызова API, когда вызывается следующий шаг с тем же сообщением об ошибке
    • , я пытался сохранить и повторно использовать значение браузера, но безрезультатно.
    • Я пытался открытьокно, запустите вызов API, закройте окно: но закрыть окно совсем не работает
    • Я попытался переключить окно, используя URL и заголовок, но не помогло вообще.

Что-то странное происходит, когда $ функциональность теряет след экземпляра wdio, если между ними происходит вызов API.Я изо всех сил пытаюсь исправить это, и, не имея API-вызова между ними, не могу создать мою среду автоматизации тестирования.Следовательно, вклад в это будет высоко ценится.

Пример кода, который я использовал, приведен ниже для вашей справки

import { expect } from 'chai';
import apiCheck from 'src/ext/api.check';
import lPage from 'src/pages/login.page';
import sPage from 'src/pages/summary.page';

let superTest = require('supertest');

const request = superTest('http://localhost:3000/api/');
const apiEndPoint = 'auth/login';
const headerOrigin = 'http://localhost:3001';
const headerCookie = '__DEEI_SESSION__=abcd1234';


describe('fund part ', () => {
        beforeEach(() => {
            browser.url('login?');
        });


        it('Get API Response in seperate ts file and run through wdio steps', async () => {
            let accountNo = lPage.getLoginAccountType('Standard');

            try {
                    let res = await apiCheck.getApiLoginData(accountNo);
                    console.log(res);

                } catch (error) {
                    console.log(error);
                }

            lPage.enterLoginData(accountNo, '2dsXS£');
        });

        it('Get API Response in same it block and run through wdio steps', async () => {

            let accountNo = lPage.getLoginAccountType('Standard');

            let requestBody = `{"username": \"${accountNo}\", "password": "2dsXS£$"}`;
            let response = await request
                .post(apiEndPoint)
                .send(requestBody)
                .set('Origin', headerOrigin)
                .set('Content-Type', 'application/json')
                .set('Cookie', headerCookie)
                .expect(200);


            lPage.enterLoginData(accountNo, password);
            });
});

1 Ответ

2 голосов
/ 22 марта 2019

Вместо супер-теста попробуйте использовать sync-request . Это сделает запрос Rest синхронным для использования в среде тестирования.

const request = require('sync-request');
it('Get API Response in same it block and run through wdio steps', () => {

            let accountNo = lPage.getLoginAccountType('Standard');

            let requestBody = `{"username": \"${accountNo}\", "password": "2dsXS£$"}`;
            let response = request(
                'POST',
                '_SOME_POST_END_POINT',
                {
                    headers: { _SOME_HEADER_IF_NEEDED_},
                    json: {_JSON_FOR_POST}
                }
            );


            lPage.enterLoginData(accountNo, password);
            });
...