TestCafe如何重新加载实际页面

8
有没有一种方法可以重新加载我正在使用 TestCafe 访问的实际测试页面,而不是在 TestCafe 下运行的网站。我已经尝试使用以下代码:
await t.eval(() => location.reload(true));

但这只会重新加载TestCafe使用的服务器页面。例如,如果我测试www.google.com,在启动TestCafe后浏览器中的URL将类似于http://172.16.0.152:58486/Qf6eMxOvA/https:/www.google.com/,当我执行上面的代码时,它会重新加载该站点。有没有一种方式可以强制重新加载www.google.com以实际模拟重新加载被测试的页面?


顺便说一下,location.reload(true) 使用了一个非标准参数。只有 Firefox 实现了这个功能。它基本上像是按下 Shift + F5。其他浏览器会忽略此参数。 - htho
2个回答

11
await t.eval(() => location.reload(true));

你说得对,你应该使用上面提供的代码重新加载你的测试页面。

请查看下面的示例。这个示例按预期工作:我们在页面重新加载后检查本地存储值。

test.js:

import { ClientFunction } from 'testcafe';

fixture `fixture`
    .page `http://devexpress.github.io/testcafe/example`;

const getLocalStorageItem = ClientFunction(key => localStorage.getItem(key));

test('local storage', async t => {
    await t.eval(() => localStorage.setItem('key', 'value'));
    await t.expect(getLocalStorageItem('key')).eql('value');
    await t.wait(2000);
    await t.eval(() => location.reload(true));
    await t.wait(2000);
    await t.expect(getLocalStorageItem('key')).eql('value');
});

结果:

Running tests in:
- Chrome 74.0.3729 / Windows 10.0.0

fixture
√ local storage


1 passed (9s)

我们遇到了一个特定的错误,即重新加载页面时,页面会抛出一个错误。但是当我尝试通过testcafe重新加载页面时,无法重现该错误。我猜测当testcafe重新加载时,它重新加载用于获取我的测试页面的testcafe页面。因此,它实际上像另一个导航事件一样作用于我的测试页面,而不是重新加载事件。有没有一种方法可以真正重新加载被测试的页面? - ruazn2
1
@ruazn2 在使用testcafe重新加载页面时,应该没有任何区别。您能否提供更多信息:测试页面的URL、错误消息、命令行参数(例如--skip-js-errors参数可能是问题的源头)? - Arseniy Rubtsov

2

一般情况下,应避免使用evalwait。相反,应该使用Testcafe的ClientFunction。在我的基础页面对象中,我会使用类似以下代码:

  async refresh () {
    await ClientFunction(() => {
      document.location.reload();
    })();
  }

然后在你的测试中,使用类似 myPage.refresh() 的方式调用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接