Как сбросить значения scrollHeight для элементов DOM, полученных с помощью ClientFunction - PullRequest
4 голосов
/ 04 апреля 2019

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

Я замечаю, что при опросе объекта window.document через ClientFunction в этих тестах, в зависимости от порядка выполнения, я получаю разные значения.

например. mytest1.js

import { Selector, ClientFunction } from 'testcafe';

  fixture `Homepage`
    .page `http://mypage.com`;

  test('Test 1', async t => {

    const getBodyHeight = ClientFunction(() => window.document.body.scrollHeight);
    console.log(await getBodyHeight()) // 800px

  });

mytest2.js

import { Selector, ClientFunction } from 'testcafe';

  fixture `Dashboard`
    .page `http://mypage.com/dashboard`;

  test('Test 2', async t => {

    const getBodyHeight = ClientFunction(() => window.document.body.scrollHeight);
    console.log(await getBodyHeight()) // 1200px

    });

Если я запускаю их, используя npm run testcafe -- firefox:headless mytest*.js, и порядок уменьшается от высоты к высоте, консоль будет записывать:

...
800
...
1200

Однако, если я выполню их в обратном направлении (от большой высоты к меньшей высоте), я получу:

...
1200
...
1200

Как будто document.body растягивается до максимального значения и не возвращается.

Есть ли способ использовать ClientFunction(..) или, возможно, какие-либо другие средства для правильного сброса этих значений?

1 Ответ

3 голосов
/ 05 апреля 2019

Этот тестовый сценарий с ClientFunction(() => window.document.body.scrollHeight) выглядит правильно. Я подготовил небольшой пример, и я не могу воспроизвести это поведение. Работает ли следующий пример, как ожидается, на вашей стороне?

index1.html

<html>
<head></head>
<body>

</body>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
test
</html>

index2.html

<html>
<head></head>
<body>

</body>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
test
</html>

test1.js

import { Selector, ClientFunction } from 'testcafe';

fixture `My Fixture`
    .page `./index1.html`;

test('test 1', async (t) => {
    const getBodyHeight = ClientFunction(() => window.document.body.scrollHeight);

    console.log('test 1 body.scrollHeight', await getBodyHeight());
});

test2.js

import { Selector, ClientFunction } from 'testcafe';

fixture `My Fixture`
    .page `./index2.html`;

test('test 2', async (t) => {
    const getBodyHeight = ClientFunction(() => window.document.body.scrollHeight);

    console.log('test 2 body.scrollHeight', await getBodyHeight());
});

Результаты:

  1. testcafe "firefox:headless" tests/test1.js tests/test2.js
 My Fixture
test 1 body.scrollHeight 932
 √ test 1

 My Fixture
test 2 body.scrollHeight 1762
 √ test 2


 2 passed (0s)
  1. testcafe "firefox:headless" tests/test2.js tests/test1.js
 My Fixture
test 2 body.scrollHeight 1762
 √ test 2

 My Fixture
test 1 body.scrollHeight 932
 √ test 1


 2 passed (0s)
...